Bagaimana saya bisa memberikan nama file dengan spasi sebagai argumen?


11

Saya memiliki skrip Python yang menerima argumen string.

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

Ini berfungsi seperti yang diharapkan.

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


Jika saya harus memberikan nama file yang akan saya lakukan,

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

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

Jika menggunakan -Qdari lsperintah, saya bisa membungkus hasil antara tanda kutip ganda. Namun, kutipan tetap lolos dalam skrip Python, yaitu.

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

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


Bagaimana saya harus memperluas lsnama file menjadi string yang tepat untuk digunakan sebagai argumen? (seperti pada contoh pertama saya)


Anda harus mengutip ekspansi shell: "$(ls -Q '/some/dir/*.jpg')". Namun ada alternatif yang lebih baik sebagaimana dinyatakan oleh jawaban.
Bakuriu

Jawaban:


23

Jangan diuraikan ls. Cukup gunakan:

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

Ini melakukan shell globbing yang menggantikan /path/to/*.jpgdengan daftar yang tepat.


5

Saya pikir jawaban glob di atas adalah yang terbaik, tetapi xargsdan findjuga merupakan solusi yang kadang-kadang dapat digunakan.

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

Ini berfungsi karena -print0pada findakan memisahkan output dengan null byte daripada spasi, dan -0pada baris perintah xargs akan menganggap input dipisahkan oleh null byte.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.