Проблема, с которой сталкиваются многие начинающие программисты на Python, заключается в передаче списка как аргумента командной строки с использованием библиотеки argparse.
Предположим, есть следующий скрипт:
import argparse parser = argparse.ArgumentParser() parser.add_argument('-l', '--list', type=list, action='store', dest='list', help='Set flag', required=True) args = parser.parse_args() print(args.list)
И он запускается с помощью команды:
python test.py -l "1 2 3 4"
В этом случае ожидается, что args.list
будет списком ["1", "2", "3", "4"]
, однако на самом деле возвращается список ['1 2 3 4']
. Это происходит потому, что argparse
воспринимает аргумент -l
как одну строку, а не список.
Чтобы решить эту проблему, можно воспользоваться аргументом nargs
функции add_argument
. nargs='+'
говорит argparse
, что ожидается один или более аргументов.
Вот так можно изменить код:
import argparse parser = argparse.ArgumentParser() parser.add_argument('-l', '--list', nargs='+', dest='list', help='Set flag', required=True) args = parser.parse_args() print(args.list)
Теперь, если запустить скрипт с теми же аргументами:
python test.py -l 1 2 3 4
то args.list
будет возвращать список ['1', '2', '3', '4']
, что и ожидалось изначально.
Таким образом, для передачи списка в качестве аргумента командной строки с помощью argparse
, лучше всего использовать аргумент nargs='+'
функции add_argument
.
Добавить комментарий