Как я могу указать, что некоторые аргументы командной строки являются обязательными в Python? - PullRequest
7 голосов
/ 22 августа 2009

Я пишу программу на Python, которая принимает аргументы командной строки. Я анализирую их с getopt (хотя мой выбор getopt не католический брак. Я более чем готов использовать любую другую библиотеку). Есть ли способ указать, что определенные аргументы должны быть указаны , или я должен вручную убедиться, что все аргументы были заданы?

Edit: Я изменил все экземпляры option на аргумент в ответ на публичный протест. Пусть не будет сказано, что я не отзывчив на людей, которые мне помогают: -)

Ответы [ 2 ]

9 голосов
/ 22 августа 2009

Что касается меня, я предпочитаю использовать модуль 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")

Мне кажется странным делать опции обязательными - они называются опции не без смысла ...

7 голосов
/ 22 августа 2009

Самый простой подход - сделать это самостоятельно. * 1001 Т.е. *

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)
...