是否可以用Python';args解析?

是否可以用Python';args解析?,python,subprocess,argparse,Python,Subprocess,Argparse,我有一个Python脚本,它读取一个包含其他工具的命令行调用的文件。我想在调用该工具之前修改此调用的选项。例如,我可能会转换: my_util --input file1.txt --option1 red --option2 blue ……为此: my_util --input file1_001.txt --option1 red --option3 green (更准确地说,我将以列表的形式处理参数。) 我认为使用模块将是实现这一点的最简单方法:我可以解析参数,根据需要更改、添加或删除

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

my_util --input file1.txt --option1 red --option2 blue
……为此:

my_util --input file1_001.txt --option1 red --option3 green
(更准确地说,我将以列表的形式处理参数。)

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


但是最后一步该怎么做呢?给定返回的对象,我是否可以轻松地重建命令行选项列表,例如可以传递给?

命名空间对象只是一个简单的对象子类,因此您可以使用
vars
以dict的形式获取值:

>>> 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

是的,这就是我最后要做的。唯一需要注意的是,此对象不会区分所需的位置参数和选项。