Подтвердить что ты не робот

Getopt() не применяет требуемые аргументы?

У меня возникают проблемы с этим кодом getopt() в script, который я пишу, который делает некоторые простые манипуляции с файлами, заданными 2 обязательными параметрами (имя входного файла и имя выходного файла) и/или 2 необязательных/ситуационных аргумента ( debug или help).

Код:

def main(argv):
    try:
        opts, args = getopt.getopt(argv, "i:o:dh", ["input-file=", "output-file=", "debug", "help"])
    except getopt.GetoptError:
        usage()
        sys.exit(2)

    for opt, arg in opts:
        if opt in ("-h", "--help"):
            usage()
            sys.exit()
        elif opt in ("-d", "--debug"):
            global _debug
            _debug = 1
        elif opt in ("-i", "--input-file"):
            u_input_file_name = arg
        elif opt in ("-o", "--output-file"):
            u_output_file_name = arg

Согласно документации getopt():

которые требуют аргумента, за которым следует двоеточие (':', то есть тот же формат, который использует Unix getopt()).

Проблема заключается в том, что, насколько я понимаю, переменные /args, за которыми следует :, должны выполняться по мере необходимости... но параметры i и o не применяются. Выполнение этого фрагмента завершает отправку ошибки о u_input_file_name перед назначением:

[[email protected] ~/python]$ ./inco_add_cm_mpscli.py -o google
Traceback (most recent call last):
  File "./inco_add_cm_mpscli.py", line 57, in <module>
    main(sys.argv[1:])
  File "./inco_add_cm_mpscli.py", line 25, in main
    infile = open(u_input_file_name, 'r')
UnboundLocalError: local variable 'u_input_file_name' referenced before assignment

Что я делаю неправильно?

4b9b3361

Ответ 1

Параметр, за которым следует двоеточие, означает, что ему нужен аргумент. Это не означает, что этот параметр применяется. Вы должны написать свой собственный код, чтобы обеспечить наличие опций/аргументов.

Ответ 2

Как примечание, я обнаружил, что argparse проще и полезнее, чем getopt, и поддерживает обязательные аргументы.

http://docs.python.org/2/howto/argparse.html#id1

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("echo", help="echo the string you use here")
args = parser.parse_args()

Командная строка

$ python prog.py
usage: prog.py [-h] echo
prog.py: error: the following arguments are required: echo