0

Я хочу использовать '=' в качестве разделителя аргументов и не получил никакой опции в документации библиотеки. Таким образом, '=' поддерживается как разделитель аргументов/разделитель с помощью argparse.Как использовать '=' в качестве разделителя аргументов, используя argparse Python?

class Parse: 
    def __init__(self): 
     parser = argparse.ArgumentParser() 
     parser.add_argument("script_config",help="Script Config File") 
     parser.add_argument("devices",help="devices") 
     parser.add_argument("log_file",help="log_file") 
     parser.add_argument("result_file",help="result_file") 
     parser.add_argument("testbed_file",help="testbed_file") 
     parser.add_argument("runtime",help="Just Runetime") 
     args = parser.parse_args() 
     print pprint.pprint(args) 

a=Parse() 

Вывод в коде выше, здесь я получил во время выполнения как runtime=10.

[email protected]:~/cloudzelera/$ python ../lib/TestsuiteOption.py /tmp/abc.conf qa05__lnx1__i-12b651ea /tmp/123.suite /tmp/result.tmp /tmp/config runtime=10 
Namespace(devices='qa05__lnx1__i-12b651ea', log_file='/tmp/123.suite', result_file='/tmp/result.tmp', runtime='runtime=10', script_config='/tmp/abc.conf', testbed_file='/tmp/config') 
None 
+0

Так что ... Не могли бы вы опубликовать код, который может быть просто скопируйте вставку, чтобы мы могли ее выполнить? - – Melon

ответ

1

runtime не является необязательным аргументом, это требуется, позиционная аргумент. Таким образом, вы никогда не использовать имя в командной строке:

TestsuiteOption.py /tmp/abc.conf qa05__lnx1__i-12b651ea /tmp/123.suite /tmp/result.tmp /tmp/config 10 

Если вы хотите runtime быть необязательными, начать вариант с двумя черточками (для длинного имени):

parser.add_argument("--runtime", help="Just Runtime") 

и используйте то же самое в командной строке:

TestsuiteOption.py /tmp/abc.conf --runtime=10 qa05__lnx1__i-12b651ea /tmp/123.suite /tmp/result.tmp /tmp/config 

Теперь этот параметр можно использовать в любом месте командной строки, в том числе в начале.

Обратите внимание, что argparse использует условные обозначения командной строки UNIX, где необязательные аргументы начинаются с - для коротких 1-символьных аргументов, -- для длинных аргументов. Он не подходит для других конвенций.

+0

Я не могу добавить префикс '-' во время выполнения, поэтому мне нужно использовать только runtime = 10. – user87005

+0

@ user87005: тогда 'argparse' не может вам помочь. Вам придется написать собственный синтаксический анализатор командной строки. –

+0

У меня уже есть собственный парсер (уродливый синтаксический анализатор sys.argv). Теперь вам нужно добавить опцию командной строки. Поэтому я планирую перейти на лучший парсер python. { 106 # Чтение sys.args 108 __script_config__ = sys.argv [1] 109 __devices__ = sys.argv [2] 110 __log_file__ = sys.argv [3] 111 __result_file__ = sys.argv [4] 112 __testbed_file__ = sys.argv [5] } – user87005

0

Учитывая то, что вы указали не соответствует аргумента конвенций разборе Unix, поэтому имеют еще одну строку в конце, где вы могли бы сделать:

args.runtime = args.runtime.split('=')[1] 

 Смежные вопросы

  • Нет связанных вопросов^_^