os.system() कॉल्स में कमांड तर्कों से बचना
पायथन में os.system() के साथ काम करते समय, उचित तर्क प्रबंधन सुनिश्चित करना है महत्वपूर्ण। शेल के आदेशों में हस्तक्षेप को रोकने के लिए फ़ाइलों और अन्य मापदंडों को अक्सर भागने की आवश्यकता होती है। यहां विभिन्न ऑपरेटिंग सिस्टम और शेल्स, विशेष रूप से बैश के लिए तर्कों से प्रभावी ढंग से बचने के लिए एक व्यापक मार्गदर्शिका दी गई है:
उद्धरण का उपयोग करना
सबसे सरल समाधान उद्धरणों में तर्क संलग्न करना है। सिंगल कोट्स (') शेल विस्तार को रोकते हैं, जबकि डबल कोट्स (") वेरिएबल प्रतिस्थापन की अनुमति देते हैं लेकिन उद्धृत स्ट्रिंग के भीतर वेरिएबल विस्तार को दबाते हैं। यह दृष्टिकोण बैश सहित विभिन्न प्लेटफार्मों और शेल्स में व्यापक रूप से समर्थित है:
os.system("cat '%s' | grep something | sort > '%s'"
% (in_filename, out_filename))
shlex Module का उपयोग करना
पायथन विशेष रूप से इस उद्देश्य के लिए डिज़ाइन किया गया shlex मॉड्यूल प्रदान करता है। इसका quote() फ़ंक्शन बैश सहित POSIX शेल में उपयोग के लिए स्ट्रिंग्स से ठीक से बच निकलता है:
import shlex
escaped_in_filename = shlex.quote(in_filename)
escaped_out_filename = shlex.quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
escaped_in_filename, escaped_out_filename))
पाइप मॉड्यूल का उपयोग करना (बहिष्करण चेतावनी!)
पायथन संस्करण 2.x और 3.x के लिए 3.10 तक, पाइप्स.उद्धरण से अप्रचलित पाइप मॉड्यूल का उपयोग shlex.quote के विकल्प के रूप में किया जा सकता है। ध्यान रखें कि पायथन 3.11 से शुरू होकर, पाइप को हटाने के लिए चिह्नित किया गया है:
from pipes import quote
escaped_in_filename = quote(in_filename)
escaped_out_filename = quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
escaped_in_filename, escaped_out_filename))
एक सामान्य नियम के रूप में, सुरक्षा कारणों से, उपयोगकर्ता-जनित इनपुट को उचित सत्यापन और स्वच्छता के बिना सीधे सिस्टम कॉल में प्लग नहीं किया जाना चाहिए।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3