如何在Python中指定某些命令行参数为必需?

8 投票
3 回答
16860 浏览
提问于 2025-04-15 13:47

我正在用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)

撰写回答