如何使用包含其他参数的argparse解析参数

时间:2018-02-14 14:52:49

标签: python bash argparse

我正在编写一个脚本,使用argparse,它应该接受用户输入。最后一个参数是--args,并且使用该参数,我想接受一个参数字符串,然后将其传递给在我的脚本中调用的bash脚本。

这是一个非常简化的版本:

在Python(myscript.py)中:

import argparse
import subprocess


parser = argparse.ArgumentParser()
parser.add_argument("--name", type=str, help=description, default="")
parser.add_argument("--args", type=str, nargs='+', help=description, default="")

args = parser.parse_args()
subprocess.call("myotherscript.sh {}".format(args.script, args.args))

在Bash中:

python myscript.py --name myname --args --arguments for --the inner --script here

到目前为止,我已经尝试转义Bash中的--(例如\\--the inner等),但是我可以用Python替换它们(" ".join([s.replace("\\", "") for s in args.args])),但是并不优雅。

我想知道是否有更好的方法来处理argparse。

1 个答案:

答案 0 :(得分:1)

argparse有可能only partially parse arguments。只要此脚本的参数与要传递的参数*。

之间没有重叠,这就可以工作
import argparse
import subprocess


parser = argparse.ArgumentParser()
parser.add_argument("--name", help=description, default="")    # default type is already str

args, other_args = parser.parse_known_args()
subprocess.call("myotherscript.sh {}".format(" ".join(other_args)))

您还可以使用join添加来避免list

subprocess.call(["myotherscript.sh"] + other_args))

*如文档中所述:

  

警告

     

Prefix matching规则适用于parse_known_args()。解析器可以   即使它只是其已知的一个前缀,也会使用一个选项   选项,而不是将其留在剩余的参数列表中。