Python optparse 不接受选项

Python optparse not accepting options

我编写了一个最多接受 4 个选项和 2 个参数的函数。选项为 -1、-2、-3 和 -u。默认情况下,它们的值分别设置为 true、true、true 和 false,但启用任何选项都会导致该值翻转。问题是,即使我指定

python comm.py -1 -2 -u test test2

并打印选项的值,它们仍然显示默认值。以下是我的代码的相关部分:

...
...
...
parser.add_option("-1", action="store_false", dest="xcol1", default=True, help="...")
parser.add_option("-2", action="store_false", dest="xcol2", default=True, help="...")
parser.add_option("-3", action="store_false", dest="dups", default=True, help="...")
parser.add_option("-u", action="store_true", dest="donotsort", default=False, help="...")

options, args = parser.parse_args(sys.argv[2:])

xcol1=options.xcol1
xcol2=options.xcol2
dups=options.dups
donotsort=options.donotsort


print "xcol1:"
print xcol1
print "xcol 2:"
print xcol2
print "dups:"
print dups
print "donotsort:"
print donotsort
print args
...
...
...

用上面的代码执行上述命令会输出:

正确

错误

正确

正确

测试,测试2

即默认值。它真的应该输出“False, False, True, True, ...”,因为启用了选项 1、2 和 u。我做错了什么?这与解析器有关吗,因为我不是100% 确定我正确使用了解析器。

此外,当我将选项列为 -12u 而不是 -1 -2 -u 时,它的行为不同 - 布尔值不同

应该是

options, args = parser.parse_args()

同时加入:

print options

结果:

xcol1:
True
xcol 2:
True
dups:
True
donotsort:
False
['test', 'test2']
{'dups': True, 'donotsort': False, 'xcol2': True, 'xcol1': True}

解释:

sys.argv 是一个列表,类似于 [{myScript.py}, {args...}]。 因此,sys.argv[2:] 摆脱了你的标志。

鉴于:

import sys
print sys.argv

结果:

>>> python showArgs.py -12u
>>> ['showArgs.py', '-12u']

另外,根据the official docs, optparse is deprecated in favor of argparse