在 Python 命令行参数中拆分长参数



如何使用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()

根据您的系统使用以下键编写多行命令。

适用于基于 Unix 的系统。

^适用于Windows命令提示符。

`适用于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"

对于 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系统上使用

为了可读性起见,假设您谈论的是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()

具有
  • 具有子命令的参数解析标志。基本上,这涉及将一些命令隐藏在其他命令后面。因此,您可能没有选项 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}')

这与python无关,这取决于你的终端。在 bash (linux( 中,你的命令是有效的,因为告诉 shell 你正在下一行继续命令。我假设你在Windows中使用cmd。在这种情况下,等效运算符是^,所以只需写:

python myscript.py ^
--argument1 "Value1" ^
--argument2 "Value2" ^
--argument3 "Value3" ^
--argument4 "Value4" ^
--argument5 "Value5" ^
--argument6 "Value6"

这同样适用于脚本(.sh.cmd文件等(。在Powershell中,运算符是反引号,仅供参考。

最新更新