簡體   English   中英

在 Python 命令行參數中拆分長參數

[英]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()

為了便於閱讀,假設您正在談論Value1Value2 ,...是很長的字符串,您可以這樣做。

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()來完成此操作

  • 有包含子命令的 argparse 標志。 基本上,這涉及將一些命令隱藏在其他命令后面。 因此,您可能有選項 1a、1b、2a、2b、3a、3b,而不是選項 1->6。 因此,您可能會輸入以下內容:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM