Как принимать бесконечное количество аргументов в argparse?

#python #argparse

#python #argparse

Вопрос:

Я создаю инструмент командной строки Python с argparse, который декодирует и кодирует азбуку Морзе. Вот код:

 parser.add_argument('-d','--decode',dest="Morse",type=str,help="Decode Morse to Plain text .")
parser.add_argument('-e','--encode',dest="text",type=str,help="Encode plain text into Morse code .")
  

когда я набираю более одного аргумента после кодирования или декодирования, он возвращает это:

 H4k3rDesktop> MorseCli.py -e Hello there
usage: MorseCli.py [-h] [-d MORSE] [-e TEXT] [-t] [-v]
MorseCli.py: error: unrecognized arguments: there
  

Как я буду принимать больше аргументов, а не только первое слово?

Комментарии:

1. Кстати, это отлично работает, когда есть только один аргумент.

2. Используйте двойные кавычки при передаче аргументов: MorseCli.py -e "Hello there"

3. Большое спасибо @PaulM. Теперь он работает и выдает правильный вывод.

Ответ №1:

Оболочка разбивает входные данные на отдельные строки в пространстве, поэтому

 MorseCli.py -e Hello there
  

sys.argv то, что видит анализатор, это

 ['MorseCli.py', '-e', 'Hello', 'there']
  

С nargs=' ' помощью вы можете указать синтаксическому анализатору принимать несколько слов, но результатом синтаксического анализа является список строк:

 args.encode = ['Hello', 'there']
  

Предложение о цитировании не позволяет оболочке разделять эти слова

 ['MorseCli.py', '-e', 'Hello there']