在 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()
为了可读性,假设您正在谈论 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()
- 具有带有子命令的 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.
如何使用 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()
- 具有带有子命令的 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.