python getopt создает опцию GetoptError --mode не должен иметь аргумента - PullRequest
0 голосов
/ 13 января 2019

GetOpt, кажется, не работает, когда я указываю параметр командной строки, выдает исключение, этот файл с именем o.py:

import getopt
import sys
opts,args = getopt.getopt(sys.argv[1:], "m:p:", ['mode', 'perf'])
for opt_name,opt_value in opts:
    if opt_name in ('--mode'):
        print opt_name
        continue
    if opt_name in ('--perf'):
        print opt_name
        continue

Тогда я получаю исключение времени выполнения, когда:

python o.py --mode=a
Traceback (most recent call last):
File "o.py", line 3, in <module>
    opts,args = getopt.getopt(sys.argv[1:], "m:p:", ['mode', 'perf'])
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getopt.py", line 88, in getopt
    opts, args = do_longs(opts, args[0][2:], longopts, args[1:])
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getopt.py", line 159, in do_longs
    raise GetoptError('option --%s must not have an argument' % opt, opt)
getopt.GetoptError: option --mode must not have an argument
opts, args = do_longs(opts, args[0][2:], longopts, args[1:])

Файл "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/getopt.py", строка 159, в do_longs поднять GetoptError (опция '-% s не должен иметь аргумент'% opt, opt) getopt.GetoptError: опция --mode не должна иметь аргумента

Так где я ошибся и как это исправить?

1 Ответ

0 голосов
/ 13 января 2019

В ваших длинных именах опций отсутствует завершающий =. См. документы , а именно:

longopts, если указан, должен быть списком строк с именами длинных опций, которые должны поддерживаться. Первые символы «-» не должны быть включены в название опции. За длинными параметрами, требующими аргумента, должен следовать знак равенства ('=') ...

1012 * Т.е. *

opts,args = getopt.getopt(sys.argv[1:], "m:p:", ['mode=', 'perf='])
...