Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有带引号的可选值的argparse--选项--for--other--cmd";_Python_Python 3.x - Fatal编程技术网

Python 带有带引号的可选值的argparse--选项--for--other--cmd";

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

我需要将参数直接传递给在python脚本中执行的命令。脚本本身不需要计算或操作要传递给命令的参数

./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”