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以不同的方式处理参数_Python_Arguments_Command Line Arguments_Argument Passing - Fatal编程技术网

Python argparse以不同的方式处理参数

Python argparse以不同的方式处理参数,python,arguments,command-line-arguments,argument-passing,Python,Arguments,Command Line Arguments,Argument Passing,我想创建一个可选参数,它将是'-'(双破折号和空格),并将其后面的所有内容作为其值。问题是在'-'之后可能会出现一些其他可选参数。我不希望将它们解析为可选参数,而是解析为'-'的值。例如: python prog1 --foo 1 --bar 2 这里的foo和bar是可选参数,其值分别为1和2 python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14 在这里,我希望将foo和bar前面的-->解析为可选参数。但是我希望将'--foo4--bar 14

我想创建一个可选参数,它将是
'-'
(双破折号和空格),并将其后面的所有内容作为其值。问题是在
'-'
之后可能会出现一些其他可选参数。我不希望将它们解析为可选参数,而是解析为
'-'
的值。例如:

python prog1 --foo 1 --bar 2
这里的
foo
bar
是可选参数,其值分别为
1
2

python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14
在这里,我希望将
foo
bar
前面的
-->
解析为可选参数。但是我希望将
'--foo4--bar 14'
解析为可选参数
'--'
的值。如果可能的话,我不想将
'-'
后面的参数重命名为
foo2
bar2

那么这可能吗?这是如何实现的呢?

看起来图书馆可以为您做到这一点

本节:

“[--]”。按照惯例,双破折号“-”用于分隔位置 可能被误认为选项的参数。为了支持这一点, 约定将“[--]”添加到您的使用模式中


argparse
已经支持将
--
作为选项结束符。唯一的区别是默认处理分别处理以下参数。假设
prog1
看起来像

import argparse

p = argparse.ArgumentParser()

p.add_argument('--foo')
p.add_argument('--bar')
p.add_argument('remaining', nargs=argparse.REMAINDER)

print p.parse_args()
然后命令

% python prog1 --foo 1 --bar 2 -- --foo 4 --bar 14
产生

Namespace(bar='2', foo='1', remaining=['--', '--foo', '4', '--bar', '14'])
(而不是
名称空间(…,剩余='--foo 4--bar 14')
)。如有必要,可通过快速后处理步骤修复:

args = p.parse_args()
args.remaining = " ".join(args.remaining)
print args
那么结果是

Namespace(bar='2', foo='1', remaining='-- --foo 4 --bar 14')
丢弃
--
参数需要一些额外的后处理:

args = p.parse_args()
if args.remaining[0] == "--":
    args = args[1:]

你为什么要这样做?这是一个完全的反模式,很可能会让人感到困惑(/你未来的自我)。@will--这不是一个完全的反模式。这实际上是一种比较常见的方法来指定将传递给从属程序的参数(可能通过
subprocess.Popen
)。@mgilson所以我刚刚读到了这篇文章。这对我来说是个新闻。事实上,
argparse
已经支持使用
--
来表示选项解析结束的常见约定。
--
通常在类似Unix的操作系统上用于将参数与原始输入分开(原始输入通常表示要传递给其他命令的参数,如
xargs
).See。这太棒了——但是,我似乎在文档中找不到它。我能找到的最接近的是
argparse.rements
,但它似乎没有使用
--
分隔符…请参见(链接到文档的Python 2.7版本)的结尾。谢谢你提醒我关于
余数
;这似乎是比
*
更好的选择(至少更具描述性;我不知道在这种情况下是否有功能上的区别。)很好。好吧,反正你有我的+1,我学到了一些新东西。我运行了这段代码,我的余数是
余数=['--','--foo',4','--bar',14']
。请注意,
--
显示在其余部分中。