在Python中,我如何解析命令行,编辑生成的解析参数对象并使用更新的值生成有效的命令行?
例如,我想python cmd.py --foo=bar --step=0调用python cmd.py --foo=bar --step=1所有原始--foo=bar参数,可能在使用默认值时没有添加额外的参数.
有可能argparse吗?
您可以使用它argparse来解析命令行参数,然后根据需要修改它们。然而,目前argparse缺乏反向工作并将这些值转换回命令行字符串的功能。然而,有一个包可以精确地做到这一点,称为argunparse. 例如,下面的代码在cmd.py
import sys
import argparse
import argunparse
parser = argparse.ArgumentParser()
unparser = argunparse.ArgumentUnparser()
parser.add_argument('--foo')
parser.add_argument('--step', type=int)
kwargs = vars(parser.parse_args())
kwargs['step'] += 1
prefix = f'python {sys.argv[0]} '
arg_string = unparser.unparse(**kwargs)
print(prefix + arg_string)
Run Code Online (Sandbox Code Playgroud)
将打印所需的命令行:
python cmd.py --foo=bar --step=1
Run Code Online (Sandbox Code Playgroud)
据我所知,这是不可能的,但我也从来不需要这样做。
但由于问题中缺乏有关如何调用脚本的信息,我将假设以下内容:
python test.py cmd --foo=bar --step=0
Run Code Online (Sandbox Code Playgroud)
而你能做的就是:
from sys import argv
for index in range(1, len(argv)): # the first object is the script itself
if '=' in argv[index]:
param, value = argv[index].split('=', 1)
if param == '--step':
value = '1'
argv[index] = param + '=' + value
print(argv)
Run Code Online (Sandbox Code Playgroud)
请注意,这是非常具体的--step,并且可能是您已经想到的并且只是想要一种“更好的方法”,但同样,我认为不存在。
| 归档时间: |
|
| 查看次数: |
1719 次 |
| 最近记录: |