如何在Python中指定某些命令行参数为必需?
我正在用Python写一个程序,这个程序可以接受命令行参数。我用的是getopt
来解析这些参数(虽然我用getopt
并不是唯一的选择,我也愿意尝试其他库)。请问有没有办法指定某些参数是必须提供的,还是说我得手动检查所有参数是否都给了呢?
编辑:我把所有的option改成了argument,这是因为大家的反馈。我可不是不听大家的意见哦 :-)
3 个回答
0
在argparse库中,你可以在选项里使用required=True。
import argparse
parser = argparse.ArgumentParser(description="Help msg",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-i", "--intput", help="image input", required=True)
parser.add_argument("-o", "--output", help="image output", required=True)
parser.add_argument("-v", "--version", help="version" )
然后编译一下。
> main.py -h
Help msg
optional arguments:
-h, --help show this help message and exit
-i, --input image input
-o, --output image output
-v, --version version
> main.py
main.py: error: the following arguments are required: -i/--intput, -o/--output
这样一来,-i和-o这两个选项就是必须要有的了。
你可以去这个 网站看看,那里讲得很清楚。
9
就我个人而言,我更喜欢使用optparse模块,这个模块非常强大,比如说它可以根据你给出的选项自动生成-h帮助信息:
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="write report to FILE", metavar="FILE")
parser.add_option("-q", "--quiet",
action="store_false", dest="verbose", default=True,
help="don't print status messages to stdout")
(options, args) = parser.parse_args()
你应该手动检查是否提供了所有的参数:
if len(args) != 1:
parser.error("incorrect number of arguments")
对我来说,把选项设为必须的似乎有点奇怪,因为它们叫选项,这个名字可不是随便起的……
10
最简单的方法就是自己动手做。也就是说:
found_f = False
try:
opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
except getopt.GetoptError, err:
print str(err)
usage()
sys.exit(2)
for o, a in opts:
if o == '-f':
process_f()
found_f = True
elif ...
if not found_f:
print "-f was not given"
usage()
sys.exit(2)