我正在编写一个脚本,使用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。
答案 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()
。解析器可以 即使它只是其已知的一个前缀,也会使用一个选项 选项,而不是将其留在剩余的参数列表中。