Ручное пространство в вводе аргумента

Используя 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"

и тогда это сработало.