Python 如果错误使用参数,命令行参数不会引发错误
Python commandline parameter not raising error if argument is wrongly used
我有以下 Python 代码,其中有 1 个命令行可选参数 (c
) 和 2 个选项(a
和 b
)没有参数:
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:])
当我输入 python readwritestore.py -a
我得到:
Raw input is: -a
Alpha
User choice is a
如果命令行参数是 -a
,这就是我所希望的。但是,如果我输入 python readwritestore.py -a csvfile_name
,则会得到:
Raw input is: -a
Alpha
User choice is a
这不是我想要的。在此函数中,c
是唯一需要参数的选项。如果我输入带有参数的 a
,
代码应该给出我设置的错误消息
Error in usage - a does not require an argument
a
或 b
不会发生这种情况。它允许在不引发错误的情况下输入参数。
如果不需要参数的选项输入了参数,那么我希望它引发错误。 python readwritestore.py -a text
python readwritestore.py -b text
应该引发错误 Error in usage - a does not require an argument
.
有没有办法指定这个? getopt()
这样做是正确的方法吗?
附加信息:
我只想 python readwritestore.py -c text
使用参数。对于其他 2 个选项,a
和 b
,代码应该引发错误。
检查 sys.argv 的大小(调用脚本时提供的参数列表)可以帮助您检查:
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 做到这一点:
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()
如果提供了很多参数,将会引发错误。 (另外 python readwritestore.py -h
将像 unix 中的 man 一样显示帮助)
我有以下 Python 代码,其中有 1 个命令行可选参数 (c
) 和 2 个选项(a
和 b
)没有参数:
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:])
当我输入 python readwritestore.py -a
我得到:
Raw input is: -a
Alpha
User choice is a
如果命令行参数是 -a
,这就是我所希望的。但是,如果我输入 python readwritestore.py -a csvfile_name
,则会得到:
Raw input is: -a
Alpha
User choice is a
这不是我想要的。在此函数中,c
是唯一需要参数的选项。如果我输入带有参数的 a
,
代码应该给出我设置的错误消息
Error in usage - a does not require an argument
a
或 b
不会发生这种情况。它允许在不引发错误的情况下输入参数。
如果不需要参数的选项输入了参数,那么我希望它引发错误。 python readwritestore.py -a text
python readwritestore.py -b text
应该引发错误 Error in usage - a does not require an argument
.
有没有办法指定这个? getopt()
这样做是正确的方法吗?
附加信息:
我只想 python readwritestore.py -c text
使用参数。对于其他 2 个选项,a
和 b
,代码应该引发错误。
检查 sys.argv 的大小(调用脚本时提供的参数列表)可以帮助您检查:
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 做到这一点:
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()
如果提供了很多参数,将会引发错误。 (另外 python readwritestore.py -h
将像 unix 中的 man 一样显示帮助)