python - 是否可以使用 Python 的 argparse 重建命令行?

标签 python subprocess argparse

我有一个 Python 脚本,它读取一个包含其他工具的命令行调用的文件。我想在调用该工具之前修改此调用的选项。例如,我可能会转换:

my_util --input file1.txt --option1 red --option2 blue

...到这个:
my_util --input file1_001.txt --option1 red --option3 green

(更准确地说,我会将参数作为列表进行处理。)

我认为使用 argparse 模块将是最简单的方法:我可以解析参数,根据需要更改、添加或删除选项,然后重建命令行。

但是我怎么做最后一步呢?鉴于 Namespace parse_args() 返回的对象,我可以轻松地重建命令行选项列表,例如可以传递给 subprocess.Popen() ?

最佳答案

Namespace 对象只是一个简单的对象子类,因此您可以使用 vars 将值作为字典取出。 :

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> args = parser.parse_args(['--foo', 'BAR'])
>>> vars(args)
{'foo': 'BAR'}

或者您可以直接分配给一个类并将参数作为类变量获取:
>>> class C(object):
...     pass
...
>>> c = C()
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args(args=['--foo', 'BAR'], namespace=c)
>>> c.foo
'BAR'

使用这些结构中的任何一个来测试/替换参数并将结果传递给 Popen 都相当容易。 .

关于python - 是否可以使用 Python 的 argparse 重建命令行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14823363/

相关文章:

python - 函数调用后记住数组值

python - multiprocessing.Pool 在 Linux/Python2.7 上的 terminate() 之后生成新的子进程?

python - 在 Ubuntu 中将文件夹及其内容复制到 USB 内存棒

python - 是否有由于其编码方式而导致运行缓慢的原因? Python

python - 将变量传递给子流程调用

python - 如何将字符串拆分为命令行参数,如 python 中的 shell?

python - 括号和单引号中的 Argparse 文件输出

python-2.7 - Python argparse 不带字符 -

python - Jupyter notebook 命令在 Mac 上不起作用

python check_output 文件未找到错误 : [WinError 2] The system cannot find the file specified