У меня есть скрипт 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
имена файлов в соответствующие строки для использования в качестве аргументов? (как в моем самом первом примере)
command-line
bash
python
автозапуск
источник
источник
"$(ls -Q '/some/dir/*.jpg')"
. Однако есть более лучшие альтернативы, как указано в ответах.Ответы:
Не разобрать
ls
. Просто используйте:Это выполняет глобирование оболочки, которое заменяется
/path/to/*.jpg
соответствующим списком.источник
Я думаю , что Glob ответ выше всего, но
xargs
иfind
является также решением , которое может быть использовано иногда.Это работает, потому что
-print0
onfind
разделит вывод нулевыми байтами, а не пробелами, а-0
командная строка в xargs будет предполагать, что вход разделен нулевыми байтами.источник