2017-02-20 16 views
1

Я делаю терминальную игру, используя замечательную Cmd-библиотеку Python. Но мне было любопытно, могу ли я каким-то образом ввести в него код argparse. Подобно использованию argparse для обработки «args» из моего класса cmd.Cmd(). Чтобы сделать это, я действительно надеялся, что у argparse был способ вручную передать в него аргументы. Я просмотрел документы, но не заметил ничего подобного.Вручную передать команды в argparse? | Python 2.7

+0

Как и в [ 'parse_args (арг)'] (https://docs.python.org/2/library/argparse.html#argparse.ArgumentParser.parse_args) ? – dhke

+0

@dhke Могу ли я просто передать строки так? – Cyanite

+0

См. Связанную документацию. Они используют его повсюду. – glibdud

ответ

3

parse_args() принимает необязательный аргумент args со списком (или кортежем) для синтаксического анализа. parse_args() (без аргументов) эквивалентен parse_args(sys.argv[1:]):

В скрипте parse_args() обычно будет вызван без аргументов, и ArgumentParser будет автоматически определять параметры командной строки из sys.argv.

Если вы не имеете кортеж, но одна строка, оболочка, как аргумент расщепление может быть осуществлено с использованием shlex.split()

>>> shlex.split('"A" B C\\ D') 
['A', 'B', 'C D'] 

Обратите внимание, что argparse напечатает использование и справочных сообщений, а также exit() на фатальные ошибки. Вы можете переопределить .error() для обработки ошибок себя:

class ArgumentParserNoExit(argparse.ArgumentParser): 
    def error(self, message): 
     raise ValueError(message) # or whatever you like 
+1

Спасибо за помощь.^~^ – Cyanite

+0

Боковое примечание для любого другого, принимающего это как ответ: если вы ввели неверную команду (например, «help» вместо «--help»), argparse даст вам ошибку (визуально) и THEN вызовет ошибку. Поэтому, если вы «за исключением» ошибки, пользователь все равно увидит ошибку, но сценарий не будет аварийно завершен. – Cyanite

+0

@Cyanite 'argparse' также будет' exit() 'на фатальных ошибках. Переопределите '.error()' в синтаксическом анализаторе, чтобы исправить это. – dhke

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

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