我有一个 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/