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