Как я могу передать имена файлов с пробелами как аргументы?

У меня есть сценарий Python, который принимает аргументы строки.

$ python script.py "one image.jpg" "another image.jpg"

Это работает как ожидалось.

Python argparse: ["one image.jpg", "another image.jpg"]


Если бы я должен передать имена файлов, я сделал бы,

$ python script.py $(ls "/some/dir/*.jpg")

Python argparse: ["one", "image.jpg", "another", "image.jpg"]

Если использование -Q из ls команда, я могу перенести результаты между двойными кавычками. Однако кавычки остаются завершенными в сценарии Python, т.е.

$ python script.py $(ls -Q "/some/dir/*.jpg")

Python argparse: ['"one image.jpg"', '"another image.jpg"']


Как я должен расшириться ls имена файлов в соответствующие строки для использования в качестве аргументов? (как в моем самом первом примере)

11
задан 16 August 2016 в 21:58

2 ответа

Не анализируйте ls. Просто используйте:

python script.py /path/to/*.jpg

Это выполняет оболочку globbing, который заменяет /path/to/*.jpg надлежащим списком.

23
ответ дан 23 November 2019 в 03:53

Я думаю, что глобальный ответ выше лучше, но xargs и find также является решением, которое иногда можно использовать.

find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py

Это работает, потому что -print0 в find будет отделять вывод нулевыми байтами, а не пробелами, а -0 в командной строке xargs будет предполагать, что вход разделен нулевыми байтами.

5
ответ дан 23 November 2019 в 03:53

Другие вопросы по тегам:

Похожие вопросы: