我编写了一个函数,最多可以接受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
时,它的行为会有所不同 - 布尔值不同
答案 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。