"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > पायथन के `os.system()` कॉल में कमांड तर्कों से ठीक से कैसे बचें?

पायथन के `os.system()` कॉल में कमांड तर्कों से ठीक से कैसे बचें?

2024-11-02 को प्रकाशित
ब्राउज़ करें:444

How to Properly Escape Command Arguments in Python\'s `os.system()` Calls?

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