如何使用argparse返回选项字符串?

use*_*551 9 python popen argparse

parser = argparse.ArgumentParser()
parser.add_argument("-p", "--pattern", help="Pattern file")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

现在是有可能得到回字符串"--pattern"的args?我需要字符串,以便我可以构建一个cmd列表以传递给Popen Popen(['some_other_program', args.pattern.option_string, args.pattern], ...)而不重复它(并且必须在两个地方维护它)(Popen(['some_other_prog', '--pattern', args.pattern], ...)).

我需要为另一个程序创建一个包装器.一些args需要传递给包装程序(通过Popen),并且包装程序需要一些args.


有比下面的例子更好的方法吗?

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], ...)
... 
Run Code Online (Sandbox Code Playgroud)

这种将args保存在变量中的方法并不是很好:

  1. 保持短期期权和长期期权变得困难.
  2. Popen如果在另一个函数中调用,则需要将这些变量(或它们的dict)传递给函数.这似乎是多余的,因为args传递给它应该是足够的.

Eri*_*ick 4

dest在您的通话中添加一个add_argument。

parser.add_argmument("p", "--pattern", dest="pattern", help="your help text")
args = parser.parse_args()
args = vars(args)
Run Code Online (Sandbox Code Playgroud)

您可以使用 来参考该模式args["pattern"]。

  • `argparse` 从 `--pattern` 推断出 dest 是 `pattern`。所以添加“dest”是没有必要的。`args` 是一个命名空间对象,而不是字典。`vars(args)` 从中生成一个字典。 (4认同)