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 -Q
dari ls
perintah, 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 ls
nama file menjadi string yang tepat untuk digunakan sebagai argumen? (seperti pada contoh pertama saya)
command-line
bash
python
autorun
sumber
sumber
"$(ls -Q '/some/dir/*.jpg')"
. Namun ada alternatif yang lebih baik sebagaimana dinyatakan oleh jawaban.Jawaban:
Jangan diuraikan
ls
. Cukup gunakan:Ini melakukan shell globbing yang menggantikan
/path/to/*.jpg
dengan daftar yang tepat.sumber
Saya pikir jawaban glob di atas adalah yang terbaik, tetapi
xargs
danfind
juga merupakan solusi yang kadang-kadang dapat digunakan.Ini berfungsi karena
-print0
padafind
akan memisahkan output dengan null byte daripada spasi, dan-0
pada baris perintah xargs akan menganggap input dipisahkan oleh null byte.sumber