在 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 标志。基本上,这涉及将一些命令隐藏在其他命令后面。因此,您可能没有选项 1->6,而是选项 1a、1b、2a、2b、3a、3b。所以你可以输入类似:
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中,运算符是反引号,fyi.