Разбор аргументов в argparse на другие аргументыPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Разбор аргументов в argparse на другие аргументы

Сообщение Гость »


Я определяю анализатор аргументов в скрипте Python (script.py) следующим образом:

импортировать арпарс импортировать систему # определяем парсер синтаксический анализатор = argparse.ArgumentParser() parser.add_argument("-a", тип=int) parser.add_argument("-b", action="store_true") parser.add_argument("-c", тип=str) # и проанализировать аргументы из sys.argv или списка parser.parse(sys.argv[1:]) Если я вызову свою программу следующим образом (вызов 1):

python script.py -c "-a 1" sys.argv[1:] выглядит как ["-c", "-a 1"]. Это то, чего я ожидал до сих пор. Здесь я хочу, чтобы результирующее пространство имен было:

Namespace(a=0, b=False, s=['-a 1']) Но argparse считывает второй элемент списка не как аргумент -c, а как отдельный аргумент и выдает ошибку, поскольку -s ожидает один аргумент. Я внимательно изучил argparse, так как до сих пор считал, что это ошибка в argparse. Итак, я локально "исправил" argparse, чтобы он обнаруживал "-a 1" как аргумент -c, а не как аргумент -a. (По сути, я сказал argparse, что существует разница между "-a 1" и "-a=1".)

Но потом я понял, что это не помогает при вызове моего скрипта (вызов 2):

python script.py -c "-b" поскольку мой трюк больше не работает (нет возможности =, которую нельзя было бы обнаружить). Здесь я ожидаю получить:

Namespace(a=0, b=False, s=['-b']) но argparse снова считывает "-b" как новый аргумент и жалуется, что -s не имеет аргумента. И здесь я не могу обмануть argparse, потому что он должен уметь различать вызов 2 и этот (вызов 3):

python script.py -c -b Но для обоих вызовов 2 и 3 sys.argv[1:] выглядит как ["-c", "-b"].

Тогда я подумал, что это может быть ошибка в библиотеке sys, и вызовы 2 и 3 должны оказаться в двух разных массивах, то есть ["-c", "\" -b\""] и ["-c", "-b"], но это может привести к поломке многих других приложений, использующих текущую реализацию sys.

Для моего конкретного случая я нашел способ заставить argparse анализировать мои данные так, как я хочу, путем изменения sys.argv[1:] перед передачей их анализатору. Но в целом я не знаю, как решить проблему/несоответствие или нужно просто принять это.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»