【发布时间】:2015-06-07 04:02:08
【问题描述】:
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--pattern", help="Pattern file")
args = parser.parse_args()
现在可以从args 取回字符串"--pattern" 吗?
我需要这个字符串,这样我就可以构造一个 cmd 列表来像Popen(['some_other_program', args.pattern.option_string, args.pattern], ...) 一样传递给 Popen,而无需重复它(并且必须在两个地方维护它)(Popen(['some_other_prog', '--pattern', args.pattern], ...))。
我需要为另一个程序创建一个包装器。一些 args 需要传递给被包装的程序(通过 Popen),一些是包装器需要的。
有没有比下面的例子更好的方法?
pass_1 = '--to-be-passed'
parser = argparse.ArgumentParser()
parser.add_argument("-p", pass_1, help="Pass me on")
parser.add_argument("-k", "--arg-for-wrapper")
args = parser.parse_args()
...
process = Popen(['wrapped_program', pass_1, args.pass_1], ...)
...
这种将args保存在变量中的方法不是很好:
- 同时持有空头期权和多头期权变得很困难。
-
Popen如果在另一个函数中调用需要将这些变量(或它们的字典)传递给函数。这似乎是多余的,因为传递给它的args应该就足够了。
【问题讨论】:
-
你为什么不把它存储在一个变量中呢?
pattern_str = '--pattern',然后是..add_argument(... pattern_str ...)。那里 - 只有一个维护点。 -
听起来你正试图硬编码两个独立程序之间的依赖关系(而且不灵活:“这些程序必须共享选项名称”)。这真的是你想做的吗?
-
@Hurkyl 是的,python 程序是另一个程序的包装器。
-
同意@AmiTavory 的解决方案是唯一可以按照您尝试的方式进行维护的解决方案。也许一个全局字典将所有模式作为键,将它们的选项标志作为值,以及大量评论说明为什么将它们拉入全局
-
@AmiTavory argparser 解析两种类型的 args - 那些特定于 python 包装器的和那些要传递给 Popen 的。拥有变量(用于将 args 传递给 Popen)而不是那些特定于包装器的变量似乎有点混乱,尽管这是一个更好的选择。我只是问有没有更好的方法。