Boşluklu dosya adlarını bağımsız değişken olarak nasıl iletebilirim?


11

Dize bağımsız değişkenlerini kabul eden bir Python komut dosyası var.

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

Bu beklendiği gibi çalışır.

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


Dosya adlarını iletmem gerekirse yapardım,

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

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

Kullanırsanız -Qbir lskomutla, ben çift tırnak arasında sonuçları sarabilirsiniz. Ancak, alıntılar Python betiğinden kaçar.

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

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


lsBağımsız değişken olarak kullanmak için dosya adlarını uygun dizelere nasıl genişletmeliyim ? (ilk örneğimde olduğu gibi)


Kabuk genişleme alıntı olmalıdır: "$(ls -Q '/some/dir/*.jpg')". Ancak cevapların belirttiği gibi daha iyi alternatifler vardır.
Bakuriu

Yanıtlar:


23

Ayrıştırma ls. Sadece kullan:

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

Bu /path/to/*.jpg, uygun listenin yerini alan kabuk globbing gerçekleştirir .


5

Yukarıda topak yanıt en iyi olduğunu düşünüyorum ama xargsve findbazen kullanılabilecek bir çözüm aynı zamanda.

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

Bunun nedeni -print0, findon'un çıkışı boşluklar yerine null -0baytlarla ayıracağı ve xargs komut satırındaki girdinin null baytlarla ayrıldığını varsayacağı için çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.