[英]Split long arguments up in Python command line arguments
如何使用argparse
拆分 Python 腳本的長參數?
目前,您必須使用參數調用腳本,如下所示:
python myscript.py --argument1 "Value1" --argument2 "Value2" --argument3 "Value3" --argument4 "Value4" --argument5 "Value5" --argument6 "Value6"
但是,這可能很難閱讀,尤其是當您有很長的參數列表時。 在我看來,像下面這樣的東西會更容易閱讀。 但是當我在下面嘗試時,我收到以下錯誤: unrecognized arguments: \\
python myscript.py \
--argument1 "Value1" \
--argument2 "Value2" \
--argument3 "Value3" \
--argument4 "Value4" \
--argument5 "Value5" \
--argument6 "Value6"
有誰知道如何做到這一點? 或者這根本不可能?
萬一有人需要它; 這是我的代碼示例:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--argument1')
parser.add_argument('--argument2')
parser.add_argument('--argument3')
parser.add_argument('--argument4')
parser.add_argument('--argument5')
parser.add_argument('--argument6')
args = parser.parse_args()
為了便於閱讀,假設您正在談論Value1
、 Value2
,...是很長的字符串,您可以這樣做。
python myscript.py \
--argument1 "Value1 is very very very \
long long long string" \
--argument2 "Value2" \
--argument3 "Value3" \
--argument4 "Value4" \
--argument5 "Value5" \
--argument6 "Value6"
或者您可以先將長參數字符串分配給 shell 變量。
ARG1="Value1 is very very very \
long long long string"
python myscript.py \
--argument1 "${ARG1}" \
--argument2 "Value2" \
--argument3 "Value3" \
--argument4 "Value4" \
--argument5 "Value5" \
--argument6 "Value6"
有幾種方法可以做到這一點。
使用配置文件。 正如其他人所說,這是標准,因為它干凈、熟悉且易於使用。 Python 有ConfigParser來處理這個問題。
具有導致從其他選項列表中調用和詢問的命令。 這將是這樣的:
python myscript.py
...
>>> Which of the following would you like to do?
>>>0. Do x
>>>1. Do y
>>>2. Do z
...
1
>>> Doing y, which subcommand would you like to use:
>>>0. Do a
>>>1. Do b
...
您可以使用 argparse 或更簡單地使用input()
來完成此操作
python myscript.py --option_2 --option_a
import subprocess as sp
def execute_script():
with open('arguments.txt') as args_file:
args = args_file.readlines()
sp.run(f'python myscript.py {*args}')
根據您的系統使用以下鍵編寫多行命令。
\\
適用於基於 Unix 的系統。
^
適用於 Windows 命令提示符。
`
適用於 Windows Powershell。
因此,在您的情況下,該命令可以寫為:
對於 Windows 命令提示符
python myscript.py ^
--argument1 "Value1 is very very very ^
long long long string" ^
--argument2 "Value2" ^
--argument3 "Value3" ^
--argument4 "Value4" ^
--argument5 "Value5" ^
--argument6 "Value6"
對於 Windows PowerShell
python myscript.py `
--argument1 "Value1 is very very very `
long long long string" `
--argument2 "Value2" `
--argument3 "Value3" `
--argument4 "Value4" `
--argument5 "Value5" `
--argument6 "Value6"
對於基於 Unix 的系統
python myscript.py \
--argument1 "Value1" \
--argument2 "Value2" \
--argument3 "Value3" \
--argument4 "Value4" \
--argument5 "Value5" \
--argument6 "Value6"
TL;DR:在windows cmd 上使用^
,在windows powershell 上使用`
& 在Unix/Linux 系統上使用\\
。
這與python無關,它取決於您的終端。 在 bash (linux) 中,您的命令有效,因為\\
告訴 shell 您將在下一行繼續該命令。 我將假設您在 Windows 中使用cmd
。 在這種情況下,等效運算符是^
,因此只需編寫:
python myscript.py ^
--argument1 "Value1" ^
--argument2 "Value2" ^
--argument3 "Value3" ^
--argument4 "Value4" ^
--argument5 "Value5" ^
--argument6 "Value6"
這同樣適用於腳本( .sh
、 .cmd
文件等)。 在 powershell 中,運算符是反引號,僅供參考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.