Python 带有带引号的可选值的argparse--选项--for--other--cmd";
我需要将参数直接传递给在python脚本中执行的命令。脚本本身不需要计算或操作要传递给命令的参数Python 带有带引号的可选值的argparse--选项--for--other--cmd";,python,python-3.x,Python,Python 3.x,我需要将参数直接传递给在python脚本中执行的命令。脚本本身不需要计算或操作要传递给命令的参数 ./cookbooks.py vendor -o "--delete" 不幸的是,argparse将带引号的字符串中的--识别为试图提供可选参数而不是值,并返回一个错误,“error:argument-o/--options:expected one-argument”。它认为没有为-o提供任何值 我只想附加传递的任何内容,而不妨碍操作符使用底层命令的能力。在下面的代码段中,o
./cookbooks.py vendor -o "--delete"
不幸的是,argparse将带引号的字符串中的--识别为试图提供可选参数而不是值,并返回一个错误,“error:argument-o/--options:expected one-argument”。它认为没有为-o提供任何值
我只想附加传递的任何内容,而不妨碍操作符使用底层命令的能力。在下面的代码段中,options
变量应该是引用的值
cmd = ' '.join(["berks", "vendor", dir, options])
subprocess.call(cmd, cwd=entry.path, shell=True)
我的解析参数定义如下。我还尝试了type=str
parser.add_argument("-o", "--options",
help="berks vendor or knife cookbook upload options passed directly to the command")
是否可以指示argparse按原样接受带引号的值?根据当前定义,可以使用
./cookbooks.py vendor -o=--delete
由于
--
不启动参数,argparse
不将其视为选项,只将其视为要拆分的名称-值对的一部分=
引号用于shell,python接收原始字符串通常当您停止为一个对象提供参数并开始提供应该指向它调用的对象的参数时,您会使用--
@jornsharpe,但请记住,argparse
本机不支持该模式;您必须手动操作sys.argv
将args分成两组,并仅将第一组传递给parse_args
@0x5453 No,argparse
支持--
很好;您只需要定义解析器以期望位置参数。@0x5453谢谢。以下两种方法有效/cookbooks.py vendor-o=--delete
/cookbooks.py vendor-o=“--delete--something”我还成功地在add\u参数定义中使用了action='append',并将数组加入到字符串中/cookbooks.py vendor-o=--delete-o=--something
。如果需要构建单个字符串,请务必仔细记录,这样用户就不会对-o=“--delete foo”-o”--something“
是否创建了包含2个或3个参数的参数列表感到困惑。谢谢。我决定如下定义参数最适合我的应用程序<代码>解析器。添加参数(“-o”,““--options”,默认值=”,help=“直接传递给命令的参数,所需格式:-o=\“args\”,即-o=\“--delete--only groupa\”)。它以直接传递给命令的参数的形式打印,所需格式:-o=“args”,即-o=“--delete--only groupa”