Як я можу передавати назви файлів з пробілами як аргументи?


11

У мене є скрипт Python, який приймає рядкові аргументи.

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

Це працює як очікувалося.

Аргумент Python: ["one image.jpg", "another image.jpg"]


Якщо мені потрібно буде передавати імена файлів, я б це зробив,

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

Аргумент Python: ["one", "image.jpg", "another", "image.jpg"]

Якщо використовувати -Qв lsкоманді, я можу обернути результати між подвійними лапками. Однак залишення котирувань у сценарії Python, тобто.

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

Аргумент Python: ['"one image.jpg"', '"another image.jpg"']


Як я повинен розгорнути lsназви файлів у власні рядки, щоб використовувати їх як аргументи? (як у моєму першому прикладі)


Ви повинні процитувати розширення оболонки: "$(ls -Q '/some/dir/*.jpg')". Однак є кращі альтернативи, як зазначено у відповідях.
Бакуріу

Відповіді:


23

Не розбирайте ls. Просто використовуйте:

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

Це виконує глобальну оболонку, яка замінює /path/to/*.jpgвідповідний список.


5

Я думаю , що Glob відповідь вище за все, але xargsі findє також рішенням , яке може бути використано іноді.

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

Це працює, тому що -print0далі findбуде відокремлено результат з нульовими байтами, а не з пробілами, а -0командний рядок xargs припустить, що вхід відокремлений нульовими байтами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.