我正在尝试使用getopts
进行命令行解析。但是,如果我通过:
或=
将选项设置为强制参数,并且命令行中没有给出参数,则以下选项将作为第一个选项的参数。我希望这会引发错误。怎么解决这个问题?
工作示例:
#!/usr/bin/env python
import sys, getopt, warnings
argv = sys.argv
try:
opts, args = getopt.getopt(argv[1:], "c:", ["config-file=", "sample-list="])
print >> sys.stderr, opts
except getopt.GetoptError as msg:
print msg
在命令行上运行此脚本,如下所示:
python getopt_test.py --config-file --sample-list
产生以下输出(opts
):
[('--config-file', '--sample-list')]
答案 0 :(得分:0)
跑步时没有错:
python getopt_test.py --config-file --sample-list
在您的代码段中:
opts, args = getopt.getopt(argv[1:], "c:", ["config-file=", "sample-list="])
# config-file requires argument i.e what ever argument come next in sys.argv list
# sample-list requires argument i.e what ever argument come next in sys.argv list
因此,当您以python getopt_test.py --config-file --sample-list
运行时,
- sample-list 只是 - config-file 的参数。
让我们通过打印opts
来确认它,它是包含元组内第一个元素的元组元素列表作为选项名称,第二个元素作为参数。
tmp/: python get.py --config-file --sample-list
[('--config-file', '--sample-list')] []
tmp/:
# lets put a proper argument for config-file
tmp/: python get.py --config-file 'argument_for_config_file'
[('--config-file', 'argument_for_config_file')] []
tmp/:
# Lets run with proper sample-list
tmp/: python get.py --config-file 'argument_for_config_file' --sample-list 'here is the
list'
[('--config-file', 'argument_for_config_file'), ('--sample-list', 'here is the list')]
[]
tmp/:
因此,您需要编写自己的正确解析,以确保用户提供正确的选项和参数。如果您使用的是optparse。
关于异常:异常getopt.GetoptError
当在参数列表中找到无法识别的选项或选项时,会引发此问题 需要参数的人都没有。但在你的情况下,没有任何规则被违反,这就是为什么它在没有任何错误的情况下默默运行。
为了防止所有这些 optparse陷阱:强烈建议使用argparse
,它具有大量新功能和良好功能来解决您的所有问题。