Невозможно обработать параметры с помощью getopt python - PullRequest
1 голос
/ 13 августа 2011

Чтобы предложить опции для моего скрипта Python, я хочу ввести некоторые параметры. Я обнаружил, что лучший способ сделать это в python - использовать getopt, но как только я запускаю свой скрипт, он ничего не делает. Пожалуйста, помогите мне!!!. Это мой код:

def main(argv):
     try:
            opts, args = getopt.getopt(argv, 'hi:o:t', ['help', 'input=', 'output='])
    except getopt.GetoptError:
            usage()
            sys.exit(2)
            file = None
            outfile = None
    for opt, arg in opts:
            if opt in ('-h', '--help'):
                    usage()
                    sys.exit(2)
            elif opt in ('-i', '--input'):
                    file = arg
            elif opt in ('-o', '--output'):
                    outfile = arg
            elif opt == '-t':
                    maininfo(file,outfile)
            else:
                    usage()
                    sys.exit(2)

if __name__ =='__main__':
    main(sys.argv[1:])

Ответы [ 3 ]

5 голосов
/ 13 августа 2011

Я предлагаю добавить больше регистрации.Это не только поможет вам сейчас, но и поможет любому, кто будет использовать ваш сценарий в будущем.

def main(argv):
    filename = None
    outfile = None
    call_maininfo = False
    try:
        opts, args = getopt.getopt(argv, 'hi:o:t', ['help', 'input=', 'output='])
        if not opts:
            print 'No options supplied'
            usage()
    except getopt.GetoptError, e:
        print e
        usage()
        sys.exit(2)
    for opt, arg in opts:
        if opt in ('-h', '--help'):
            usage()
            sys.exit(2)
        elif opt in ('-i', '--input'):
            filename = arg
        elif opt in ('-o', '--output'):
            outfile = arg
        elif opt == '-t':
            call_maininfo = True
        else:
            usage()
            sys.exit(2)

    print 'Processed options [{0}] and found filename [{1}] and outfile [{2}]'.format(
            ', '.join(argv),
            filename,
            outfile,
            )

    if call_maininfo:
        print 'Calling maininfo()'
        maininfo(filename, outfile)

Я также переместил вызов на maininfo() из цикла, поскольку вы могли бы поставить -tперед именами файлов!

3 голосов
/ 13 августа 2011

Вы можете использовать optparse (старая версия устареет после python 2.7) или argparse (новая версия), которые являются стандартными аргументами синтаксического анализа модуля python.

Надеюсь, это поможет в первую очередь

0 голосов
/ 19 сентября 2015

Пожалуйста, посмотрите этот ответ: https://stackoverflow.com/a/1540399/2542738

Как правило, вам нужно удалить 'python' из opts, так как это первый элемент списка opts: opts.pop(0), и тогда все будет в порядке.

...