Я хотел бы передать произвольный набор аргументов в формате --arg1 value1
в мой скрипт python и получить их в словаре такого типа {'arg1': 'value1}
. Я хочу использовать argparse
для достижения этого. Функция parse_known_args
допускает дополнительные аргументы, но их можно получить в виде простого списка и не назвать.Python parse_known_args с именованными аргументами
ответ
Лучше всего определить один параметр, который принимает два аргумента, имя и значение и использует настраиваемое действие для обновления словаря с использованием этих двух аргументов.
class OptionAppend(Action):
def __call__(self, parser, namespace, values, option_string):
d = getattr(namespace, self.dest)
name, value = values
d[name] = value
p.add_argument("-o", "--option", nargs=2, action=OptionAppend, default={})
Тогда вместо myscript --arg1 value1 --arg2 value2
, можно было бы написать myscript -o arg1 value1 -o arg2value1
, и после того, как args = parser.parse_args()
, вы бы args.o == {'arg1': 'value1, 'arg2': 'value2'}
.
Это несколько аналогично использованию списка или словаря содержит набор связанных переменных, вместо набора индивидуально названных переменных.
# Good
v = [x, y, z]
v = { 'key1': x, 'key2': y, 'key3': z}
# Bad
v1 = x
v2 = y
v3 = z
Вопрос о работе с произвольными парами ключ/значение возникает несколько раз. argparse
не имеет встроенного механизма для этого.
Is it possible to use argparse to capture an arbitrary set of optional arguments? (почти дубликат с мая прошлого года)
Ваша идея использования parse_know_args
и затем делать свой собственный словарь строить из extras
хорошо - и, возможно, самый простой. Как вы обрабатываете список дополнительных услуг, это будет зависеть от того, насколько хорошо себя ведут ваши пользователи (предсказуемые пары '--key', 'value'
). Это в основном так же, как если бы вы разобрали sys.arv[1:]
напрямую.
Если пользователь вводит такие данные, как --options key1:value1 key2=value2 "key3 value3"
, вы можете проанализировать эти пары в пользовательском классе Action (например, разделить строку на разделителе и т. Д.).
Вход как --options "{key1: value1, key2: value2}"
может быть обработан как строка JSON
, с функцией типа: type=json.load
(мне нужно будет посмотреть это).
- 1. Как получить словарь с именованными аргументами в функции Python
- 2. RSpec Метод тестирования с именованными аргументами
- 3. Scala 2,8 - Потенциальная проблема с именованными аргументами
- 4. Вызов TCL прок с именованными аргументами
- 5. Java string templatizer/formatter с именованными аргументами
- 6. Как передать функции с именованными аргументами
- 7. Проблема PostgreSQL с именованными аргументами в функции
- 8. Скелет для работы с именованными аргументами:
- 9. C#: перегрузочные конструкторы с необязательными параметрами и именованными аргументами?
- 10. Вызов функции с именованными аргументами в размещенном приложении
- 11. Может ли argparse связывать позиционные аргументы с именованными аргументами?
- 12. using objc_msgSend для вызова функции Objective C с именованными аргументами
- 13. Что такое синтаксис Scala для вызова функции с переменными аргументами, но с именованными аргументами?
- 14. Python декоратор с аргументами
- 15. выполнить python с аргументами
- 16. Python подпроцесс свисает с именованными трубами
- 17. Python: передать функцию функции с именованными параметрами
- 18. Кортеж с именованными элементами
- 19. Строковый формат с именованными значениями
- 20. Возможно ли сгенерировать функцию Python с аргументами во время выполнения?
- 21. ArgumentParser -h не печатать параметры после parse_known_args
- 22. Функция с чрезмерными аргументами - Python
- 23. Python - Создать ярлык с аргументами
- 24. Функция с аргументами в python
- 25. Python Decorator с посторонними аргументами
- 26. многопроцессор python с несколькими аргументами
- 27. Python: map() с частичными аргументами
- 28. python subprocess popen с аргументами
- 29. Python декораторы с аргументами функции
- 30. Python Threading с переменными аргументами (Python 2.4.3)
вы можете просто определить параметр, используя метод 'add_argument'. 'parse_known_args' - это метод, который будет анализировать все параметры, определенные с помощью' add_argument', и возвращать оставшуюся командную строку, в то время как использование 'parse_args' приведет к возникновению ошибки, если есть оставшиеся аргументы. – Bakuriu
Дополнительные аргументы могут быть любого имени/значения, неизвестного априори. –
Тогда 'argparse' не имеет никакого шанса узнать, что с ним делать. Это точка 'parse_known_args': ** вы ** должны вручную обрабатывать оставшиеся аргументы, как вам угодно. – Bakuriu