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

det*_*tly 6 python subprocess argparse

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

my_util --input file1.txt --option1 red --option2 blue
Run Code Online (Sandbox Code Playgroud)

...对此:

my_util --input file1_001.txt --option1 red --option3 green
Run Code Online (Sandbox Code Playgroud)

(更准确地说,我将以列表的形式处理参数。)

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

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

Joh*_*yon 3

命名空间对象只是一个简单的对象子类,因此您可以使用以下命令将值作为字典获取vars

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

或者您可以直接分配给一个类并将参数作为类变量获取:

>>> class C(object):
...     pass
...
>>> c = C()
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo')
>>> parser.parse_args(args=['--foo', 'BAR'], namespace=c)
>>> c.foo
'BAR'
Run Code Online (Sandbox Code Playgroud)

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