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。
我编写了一个最多接受 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。