मैं तर्कों के रूप में रिक्त स्थान के साथ फ़ाइल नाम कैसे पारित कर सकता हूं?


11

मेरे पास एक पायथन स्क्रिप्ट है जो स्ट्रिंग तर्कों को स्वीकार करती है।

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

यह उम्मीद के मुताबिक काम करता है।

अजगर का तर्क: ["one image.jpg", "another image.jpg"]


अगर मुझे फिल्नामें पास करने की ज़रूरत है, तो मैं करूँगा;

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

अजगर का तर्क: ["one", "image.jpg", "another", "image.jpg"]

यदि कमांड -Qका उपयोग करते हैं ls, तो मैं दोहरे उद्धरण चिह्नों के बीच परिणाम लपेट सकता हूं। हालांकि, उद्धरण पायथन लिपि में बच गए, अर्थात।

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

अजगर का तर्क: ['"one image.jpg"', '"another image.jpg"']


मुझे lsतर्कों के रूप में उपयोग करने के लिए फ़ाइल नाम का विस्तार कैसे करना चाहिए ? (जैसा कि मेरे पहले उदाहरण में है)


आपको शेल विस्तार का उद्धरण देना चाहिए "$(ls -Q '/some/dir/*.jpg')":। हालांकि उत्तर के अनुसार बेहतर विकल्प हैं।
बकुरीउ १u

जवाबों:


23

पार्स मत करो ls। महज प्रयोग करें:

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

यह शेल ग्लोबिंग करता है जो /path/to/*.jpgउचित सूची द्वारा प्रतिस्थापित करता है ।


5

मुझे लगता है कि इसके बाद के संस्करण ग्लोब जवाब सबसे अच्छा है, लेकिन xargsऔर findभी एक समाधान है कि कभी कभी इस्तेमाल किया जा सकता है।

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

क्योंकि यह काम करता है -print0पर findशून्य वाले उत्पादन अलग कर देगा बल्कि रिक्त स्थान से बाइट्स, और -0xargs पर कमांड लाइन इनपुट समझेंगे अशक्त बाइट्स से अलग कर दिया गया है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.