#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']