При использовании PyCharm для отладки скрипта, который принимает аргументы командной строки, могу ли я указать, принимать ли «один или несколько» параметров? - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь отладить сценарий, который использует параметры командной строки, но они могут быть одним или несколькими числами.Например,

$ test.py -c 1 2 3

или

$ test.py -c 5

Можно ли как-то установить для этого параметра значение «один или несколько» в окне параметров скрипта при отладке с помощью Pycharm?Или я должен изменить конфигурацию для тестирования каждого варианта?Спасибо:)

1 Ответ

0 голосов
/ 13 ноября 2018

Не уверен, что это именно то, что вы имели в виду, но если вы укажете поле Parameter с кавычками вокруг некоторых аргументов, они будут рассматриваться как один, например ::

# Parameter field in PyCharm: -c "1 2" -f filename.txt
>>> sys.argv[1:]
['-c', '1 2', '-f', 'filename.txt']  # 1 and 2 together in the same string

Обратите внимание, однако, что ArgumentParser будет ожидать все аргументы отдельно, даже если вы передадите nargs='+' или nargs='*' в add_argument(). Итак, если вы используете класс ArgumentParser, вы, вероятно, не хотите использовать кавычки:

# Parameter field in PyCharm: -c 1 2 -f filename
>>> sys.argv[1:]
['-c', '1', '2', '-f', 'filename.txt']

Более или менее то, что класс ArgumentParser будет делать с nargs='+' или nargs='*':

  • Начать сканирование аргументов один за другим слева направо
  • Как только он находит ключевое слово, которое он распознает (например, -c), он будет использовать все последующие аргументы, пока не достигнет другого распознаваемого ключевого слова (например, -f) или конца списка
  • Все те промежуточные аргументы, которые он найдет, будут помещены в список и связаны с первым аргументом (например, -c)

Даже если вы не используете класс ArgumentParser и у вас есть собственный код для разбора, я бы предложил принять аналогичную стратегию разбора. Это, вероятно, более интуитивно понятно для пользователей скрипта, плюс вам не нужно будет разбивать аргументы вручную в какой-то момент позже (например, '1 2'.split()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...