我修改了这里给出的示例代码: sample code for getopt
如下,但它不起作用。我不确定我错过了什么。我添加了一个" -j"此现有代码的选项。最后,我想添加尽可能多的必需命令选项以满足我的需求。
当我提供如下输入时,它不会打印任何内容。
./pyopts.py -i dfdf -j qwqwqw -o ddfdf
Input file is "
J file is "
Output file is "
你能告诉我这里有什么不对吗?
#!/usr/bin/python
import sys, getopt
def usage():
print 'test.py -i <inputfile> -j <jfile> -o <outputfile>'
def main(argv):
inputfile = ''
jfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv,"hij:o:",["ifile=","jfile=","ofile="])
except getopt.GetoptError:
usage()
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
usage()
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-j", "--jfile"):
jfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
print 'Input file is "', inputfile
print 'J file is "', jfile
print 'Output file is "', outputfile
if __name__ == "__main__":
main(sys.argv[1:])
答案 0 :(得分:4)
您的错误是在i
选项后省略冒号。如您提供的链接所述:
需要参数的选项后面应跟冒号(:)。
因此,程序的更正版本应包含以下内容:
try:
opts, args = getopt.getopt(argv,"hi:j:o:",["ifile=","jfile=","ofile="])
except getopt.GetoptError:
usage()
sys.exit(2)
使用指定的参数执行它会导出预期的输出:
~/tmp/so$ ./pyopts.py -i dfdf -j qwqwqw -o ddfdf
Input file is " dfdf
J file is " qwqwqw
Output file is " ddfdf
但是,如果对您的问题发表评论,则应使用argparse
而不是getopt
:
注意: getopt模块是命令行选项的解析器,其API设计为C getopt()函数的用户所熟悉。不熟悉C getopt()函数或想要编写更少代码并获得更好帮助和错误消息的用户应该考虑使用argparse模块。