Ls को मानव उपभोग के लिए डिज़ाइन किया गया है, और आपको इसके आउटपुट को पार्स नहीं करना चाहिए ।
शेल स्क्रिप्ट में, कुछ मामले हैं जहां एलएस के उत्पादन को पार्स करने से काम होता है, वांछित प्रभाव को प्राप्त करने का सबसे सरल तरीका है। चूंकि ls गैर-ASCII को नियंत्रित कर सकते हैं और फ़ाइल नामों में वर्णों को नियंत्रित कर सकते हैं, इसलिए ये मामले उन लोगों का सबसेट हैं जिन्हें फ़ाइल नाम प्राप्त करने की आवश्यकता नहीं है ls
।
अजगर में, पूरी तरह से आह्वान करने का कोई कारण नहीं है ls
। पायथन में ls
अंतर्निहित कार्यक्षमता सभी है। का प्रयोग करें os.listdir
एक निर्देशिका की सामग्री को सूचीबद्ध करने और os.stat
या os
फ़ाइल मेटाडाटा प्राप्त करने के लिए। os
मॉड्यूल में अन्य कार्यों के रूप में अच्छी तरह से अपनी समस्या के लिए प्रासंगिक होने की संभावना है।
यदि आप ssh पर दूरस्थ फ़ाइलों तक पहुँच रहे हैं, तो फ़ाइल नामों को सूचीबद्ध करने का एक बहुत ही मजबूत तरीका sftp है।
echo ls -1 | sftp remote-site:dir
यह प्रति पंक्ति एक फ़ाइल नाम प्रिंट करता है, और ls
उपयोगिता के विपरीत , sftp
गैर-अक्षर वर्णों को नियंत्रित नहीं करता है। आप अभी भी विश्वसनीय रूप से उन निर्देशिकाओं को सूचीबद्ध करने में सक्षम नहीं होंगे जहां एक फ़ाइल नाम में एक नई पंक्ति होती है, लेकिन ऐसा शायद ही कभी किया जाता है (इसे एक संभावित सुरक्षा समस्या के रूप में याद रखें, प्रयोज्य मुद्दा नहीं)।
अजगर में (सावधान रहें कि शेल मेटाचैकर को बचना चाहिए remote_dir
):
command_line = "echo ls -1 | sftp " + remote_site + ":" + remote_dir
remote_files = os.popen(command_line).read().split("\n")
अधिक जटिल इंटरैक्शन के लिए, प्रलेखन में sftp के बैच मोड को देखें।
कुछ प्रणालियों (लिनक्स, मैक ओएस एक्स, शायद कुछ अन्य यूनियनों पर, लेकिन निश्चित रूप से विंडोज नहीं), एक अलग दृष्टिकोण है sshfs के साथ ssh के माध्यम से एक दूरस्थ फाइल सिस्टम को माउंट करना , और फिर स्थानीय रूप से काम करना।