Python commandline parameter not raising error if argument is wrongly used
我有以下python代码,其中有1个命令行可选参数(
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import sys, getopt def main(argv): inputfile = '' outputfile = '' try: opts, args = getopt.getopt(argv,"abc:",["csvfile="]) except getopt.GetoptError: print 'Error in usage - a does not require an argument' sys.exit(2) for opt, arg in opts: print"Raw input is: {}" .format(opt) if opt in ("-c","--csvfile"): outputfile = arg print 'Output file is {}' .format(outputfile) elif opt == '-a': print 'Alpha' elif opt == '-b': print 'Beta' print 'User choice is {}' .format(opt.lstrip('-')) if __name__ =="__main__": main(sys.argv[1:]) |
当我进入
1 2 3 | Raw input is: -a Alpha User choice is a |
如果命令行的论点是
1 2 3 | Raw input is: -a Alpha User choice is a |
这不是我的本意。在这个函数中,
1 | Error in usage - a does not require an argument |
这种情况不会发生在
如果不需要参数的选项与参数一起输入,那么我希望它引发错误。
有没有办法具体说明这一点?这样做的正确方式是
其他信息:
我只想让
检查sys.argv(调用脚本时提供的参数列表)的大小有助于检查:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import sys import getopt def main(argv): inputfile = '' outputfile = '' opts, args = getopt.getopt(argv,"abc:", ["csvfile="]) for opt, arg in opts: print"Raw input is:", opt if opt in ("-c","--csvfile"): outputfile = arg print 'Output file is ', outputfile elif opt == '-a': if len(sys.argv)=2: print 'Alpha' else: print"incorect number of argument" elif opt == '-b': if len(sys.argv)=2: print 'Beta' else: print"incorect number of argument" print 'User choice is ', opt if __name__ =="__main__": main(sys.argv[1:]) |
我知道这不是您要求的(argparse),但下面是使用argparse的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from argparse import * def main(): parser = ArgumentParser() parser.add_argument('-c', '--csvfile', help='do smth with cvsfile') parser.add_argument( '-a', '--Alpha', help='Alpha', action='store_true') parser.add_argument( '-b', '--Beta', help='beta smth', action='store_true') if args.csvfile: print 'Output file is {}' .format(args.csvfile) if args.Alpha: print 'Alpha' if args.Beta: print 'Beta' if __name__ =="__main__": main() |
它将引发一个错误,即提供了许多参数。(同时,