Ручное пространство в вводе аргумента
Используя python и argparse, пользователь может ввести имя файла с -d в качестве флага.
parser.add_argument("-d", "--dmp", default=None)
Однако это не удалось, когда путь включал пробелы. Например.
-d C:\SMTHNG\Name with spaces\MORE\file.csv
ПРИМЕЧАНИЕ: пробелы вызовут ошибку (флаг принимает только "C: SMTHNG\Name" как вход).
error: unrecognized arguments: with spaces\MORE\file.csv
Принял меня дольше, чем нужно было найти решение этой проблемы...
(не нашел Q & A для него, поэтому я делаю свой собственный пост)
Ответы
Ответ 1
Простое решение:
argparse рассматривает заполненную пробел строку как один аргумент, если она инкапсулирована кавычками.
Этот вход работал и "решал" проблему:
-d "C:\SMTHNG\Name with spaces\MORE\file.csv"
ВНИМАНИЕ: аргумент имеет "" вокруг него.
Ответ 2
Для тех, кто не может разобрать аргументы и все равно получить "error: unrecognized arguments:" Я нашел обходное решение:
parser.add_argument('-d', '--dmp', nargs='+', ...)
opts = parser.parse_args()
а затем, когда вы хотите его использовать, просто
' '.join(opts.dmp)
Ответ 3
Сегодня столкнулся с этой проблемой.
-d "foo bar"
не помогло. Мне пришлось добавить знак равенства
-d="foo bar"
и тогда это сработало.