感谢你唠叨指出一个一个!
以下代码是我第一次使用Optparse编写代码。
如何在通过Optparse获取帮助时修复以下错误?
#!/usr/bin/env python
import sys
import os
from optparse import OptionParser
e = sys.argv[1]
b = sys.argv[2]
no = sys.argv[3]
def set_figu(figu):
sum = 777
return sum
def main():
usage = "Usage: negative_bin_base.py <eksponentti> <siirre> <figu>"
parser = OptionParser(usage)
parser.add_option("-h", "--help", dest="help",
help="get synopsis of parameters")
# print the output of the work-horse
print set_figu(no)
(options, args) = parser.parse_args()
if len(args) < 4:
parser.error("incorrect number of arguments")
if options.informative:
print "reading %s..." % options.help
if __name__ == "__main__":
main()
参数数量正确的错误输出示例
python negative_bin_base.py 13 13 332
Traceback (most recent call last):
File "negative_bin_base.py", line 37, in <module>
main()
File "negative_bin_base.py", line 26, in main
help="get synopsis of parameters")
File "/usr/lib/python2.6/optparse.py", line 1020, in add_option
self._check_conflict(option)
File "/usr/lib/python2.6/optparse.py", line 995, in _check_conflict
option)
optparse.OptionConflictError: option -h/--help: conflicting option string(s): -h, --help
答案 0 :(得分:8)
class optparse.OptionParser(...)
的构造函数具有可选的命名参数'add_help_option',默认为'True'。如果要提供自己的帮助选项和消息,则必须明确拒绝默认帮助选项和消息。
parser = OptionParser(usage, add_help_option=False)
答案 1 :(得分:6)
错误是您的arguments数组包含脚本名称sys.argv[0]
。因此,您的if
是一个接一个:
# python sys.argv[0] sys.argv[1] sys.argv[2] sys.argv[3]
if len(sys.argv) < 4:
sys.exit(usage)
答案 2 :(得分:1)
根据上面的示例,这应该符合您的要求:
#!/usr/bin/env python
from optparse import OptionParser
def main():
usage = "Usage: negative_bin_base.py <eksponentti> <siirre> <figu>"
parser = OptionParser(usage)
(options, args) = parser.parse_args()
if len(args) != 3:
parser.error("incorrect number of arguments")
e = args[0]
b = args[1]
no = args[2]
# ...
if __name__ == "__main__":
main()
答案 3 :(得分:1)
在这里使用optparse是我通常做的事情:
从主代码库中分离命令行解析,以实现更好的模块化。 (将处理权放在“if __name__ ==”__main __“”之后)
让optparse处理你的帮助。 (使用parser.print_help())
使用optparse构造,如果你不喜欢它们,只需自己解析sys.argv。 (使用add_option定义必要的选项)
以下是我使用optparse库编写样本的方法:
def main():
print 'Welcome to the main event!'
if __name__ == '__main__':
import optparse
parser = optparse.OptionParser()
parser.add_option("-e", "--eksponentti", dest="eksponentti",
help="This is help for <eksponentti>.",
default=None)
parser.add_option("-s", "--siirre", dest="siirre",
help="This is help for <siirre>.",
default=None)
parser.add_option("-f", "--figu", dest="figu",
help="This is help for <figu>.",
default=None)
(options, args) = parser.parse_args()
if options.eksponentti and options.siirre and options.figu:
main()
else:
print "ERROR -- Expected Arguments not given!"
parser.print_help()
在没有必要选项的情况下运行此命令将提供以下输出: (这比我在这里格式化它更漂亮......)
ERROR -- Expected Arguments not given! Usage: parm.py [options]
Options:
-h, --help show this help message and exit
-e EKSPONENTTI, --eksponentti=EKSPONENTTI This is help for <eksponentti>.
-s SIIRRE, --siirre=SIIRRE This is help for <siirre>.
-f FIGU, --figu=FIGU This is help for <figu>.