【发布时间】:2012-07-03 20:50:00
【问题描述】:
我想要以下语法:
python utility.py file1 FILE1 file2 FILE2
其中 file1 和 file2 是可选参数。 使用这种语法很简单:
python utility.py --file1 FILE1 --file2 FILE2
使用
parser.add_argument('--file1',type=file)
parser.add_argument('--file2',type=file)
但是,如果我删除破折号,argparse 开始将其解释为位置参数而不是可选参数...
换句话说,是否可以明确告诉 argparse 参数是可选的还是位置的,这样我就可以在没有破折号的情况下使用可选参数?
【问题讨论】:
-
这种语法(没有破折号)简直令人困惑!约定存在是有原因的。
-
@MartijnPieters:反例:
git或svn命令行界面。 -
@RodyOldenhuis:这些是子命令,而不是开关。每个子命令都有选项,使用破折号。
-
@MartijnPieters:这只是语义,从语法的角度来看没有区别 - 没有破折号的参数。 argparse 不(直接)支持任何语义。顺便说一句,在我的示例中它们也不是开关(但这与我刚才提到的无关)。
-
@jvm:子命令通常不共享开关。有一个共享级别 (
git --version) 和每个子命令开关 (git checkout --patch)。不要在这里忽略语义。
标签: python argparse optional-arguments