Python getopt将第二个选项作为第一个选项的参数

时间:2014-02-10 12:03:44

标签: python getopt

我正在尝试使用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')]

1 个答案:

答案 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,它具有大量新功能和良好功能来解决您的所有问题。