Python optparse不接受选项

时间:2015-04-19 01:05:01

标签: python bash optparse

我编写了一个函数,最多可以接受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
...
...
...

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

test,test2

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

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

1 个答案:

答案 0 :(得分:1)

应该是

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,而是argparse