【发布时间】:2013-06-14 02:15:34
【问题描述】:
如何使用 argparse 将任意字符串定义为可选参数?
示例:
[user@host]$ ./script.py FOOBAR -a -b
Running "script.py"...
You set the option "-a"
You set the option "-b"
You passed the string "FOOBAR"
理想情况下,我希望参数的位置无关紧要。即:
./script.py -a FOOBAR -b == ./script.py -a -b FOOBAR == ./script.py FOOBAR -a -b
在 BASH 中,我可以在使用 getopts 时完成此操作。在 case 循环中处理完所有需要的开关后,我会有一行读取 shift $((OPTIND-1)),然后我可以使用标准 $1、$2、$3 等访问所有剩余的参数...
argparse 是否存在类似的东西?
【问题讨论】:
-
你看过 argparse 教程吗?你所描述的一切都在那里
-
iirc 唯一未讨论的部分是
nargs="*"行为(因此一个位置参数可以获取所有剩余参数) -
@Nirk,棘手的是如果你只使用
parse_args,一旦它看到一个“位置”参数,它就会停止寻找其他参数并从位置参数中收集参数到最后。在大多数情况下这很好,但会破坏他的第一个和第三个例子。 -
@Nirk 另外,这个传递的字符串应该是可选的。如果我做一个香草
add_argument("word"),它就变成了强制性的。 -
看起来 argparse 本身并不能处理 optional 任意参数。使用@jedwards 答案,我可以获得所需的功能,除了 argparse 不知道任意字符串,因此调用
help对话框的用户不知道使用任意字符串的能力。
标签: python python-2.7 python-3.x