पायथन से सिस्टम कमांड चलाना
पायथन आपकी स्क्रिप्ट से सीधे बाहरी प्रोग्राम और सिस्टम कमांड निष्पादित करने के लिए शक्तिशाली क्षमताएं प्रदान करता है। यह सुविधा आपको अपने ऑपरेटिंग सिस्टम में उपलब्ध टूल की विशाल श्रृंखला का लाभ उठाते हुए पायथन की सरलता का लाभ उठाने की अनुमति देती है।
चाहे आप दोहराए जाने वाले कार्यों को स्वचालित कर रहे हों या जटिल वर्कफ़्लो को एकीकृत कर रहे हों, पायथन में सिस्टम कमांड को कॉल करने का तरीका समझने से आपकी उत्पादकता में उल्लेखनीय वृद्धि हो सकती है। इस गाइड में, हम इसे प्रभावी ढंग से प्राप्त करने के लिए विभिन्न तरीकों का पता लगाएंगे।
| आज्ञा | विवरण |
|---|---|
| subprocess.run | एक सबशेल में एक कमांड निष्पादित करता है। आउटपुट और त्रुटियों को कैप्चर कर सकता है। |
| subprocess.run([...], capture_output=True) | निष्पादित कमांड के मानक आउटपुट और मानक त्रुटि को कैप्चर करता है। |
| subprocess.run([...], shell=True) | शेल के माध्यम से कमांड चलाता है, जिससे शेल में वाइल्डकार्ड जैसी सुविधाएं मिलती हैं। |
| subprocess.Popen | एक नई प्रक्रिया में एक कमांड निष्पादित करता है, जिससे इसके निष्पादन पर अधिक नियंत्रण मिलता है। |
| process.stdout.readline() | प्रक्रिया के मानक आउटपुट से आउटपुट की एक पंक्ति पढ़ता है। |
| os.system | एक सबशेल में एक कमांड निष्पादित करता है, आमतौर पर सरल कमांड निष्पादन के लिए उपयोग किया जाता है। |
| subprocess.check_output | एक कमांड चलाता है और उसका आउटपुट लौटाता है। यदि आदेश विफल हो जाता है तो एक अपवाद उठाता है। |
| os.environ.copy() | संशोधनों की अनुमति देते हुए, वर्तमान परिवेश चर की एक प्रति बनाता है। |
| env parameter in subprocess.run | नई प्रक्रिया के लिए पर्यावरण चर निर्दिष्ट करता है। |
पायथन में स्क्रिप्ट निष्पादन को समझना
प्रदान की गई स्क्रिप्ट पायथन का उपयोग करके बाहरी कमांड निष्पादित करने के विभिन्न तरीकों को प्रदर्शित करती है। subprocess.run कमांड बहुमुखी है, जिससे आप सीधे अपनी पायथन स्क्रिप्ट से शेल कमांड चला सकते हैं। उदाहरण के लिए, subprocess.run(['echo', 'Hello, World!']) कंसोल पर एक संदेश प्रिंट करता है, जबकि subprocess.run(['ls', '-l'], capture_output=True, text=True) का आउटपुट कैप्चर करता है ls -l कमांड, एक विस्तृत निर्देशिका सूची प्रदर्शित करता है। का उपयोग करते हुए shell=True साथ subprocess.run वाइल्डकार्ड विस्तार जैसी शेल सुविधाओं के उपयोग की अनुमति देता है, जिससे यह अधिक जटिल कमांड के लिए आसान हो जाता है।
subprocess.Popen कमांड एसिंक्रोनस कमांड चलाने और प्रक्रिया के इनपुट और आउटपुट स्ट्रीम के साथ इंटरेक्शन की अनुमति देकर कमांड निष्पादन पर अधिक नियंत्रण प्रदान करता है। उदाहरण के लिए, स्क्रिप्ट उदाहरण के साथ subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE) स्थानीय मशीन को लगातार पिंग करता है और आउटपुट की प्रत्येक पंक्ति को पढ़ता है। इसके अतिरिक्त, os.system सरल कमांड निष्पादन के लिए उपयोग किया जाता है लेकिन इसमें लचीलेपन का अभाव है subprocess. पर्यावरण चर को संशोधित किया जा सकता है और इसका उपयोग करके उपप्रक्रिया में पारित किया जा सकता है os.environ.copy() और यह env में पैरामीटर subprocess.run, पर्यावरण के आधार पर गतिशील कमांड निष्पादन की अनुमति देता है।
पायथन में बाहरी कमांड निष्पादित करना
पायथन के सबप्रोसेस मॉड्यूल का उपयोग करना
import subprocess# Example 1: Running a simple shell commandsubprocess.run(['echo', 'Hello, World!'])# Example 2: Capturing the output of a commandresult = subprocess.run(['ls', '-l'], capture_output=True, text=True)print(result.stdout)# Example 3: Running a command with shell=Truesubprocess.run('echo Hello from the shell', shell=True)# Example 4: Checking the return coderesult = subprocess.run(['ls', 'nonexistentfile'], capture_output=True)if result.returncode != 0:print('Command failed')# Example 5: Using subprocess.Popen for more controlprocess = subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE)while True:output = process.stdout.readline()if output == b'' and process.poll() is not None:breakif output:print(output.strip().decode())
पायथन के साथ सिस्टम कार्यों को स्वचालित करना
ओएस.सिस्टम और सबप्रोसेस मॉड्यूल का उपयोग करना
import osimport subprocess# Example 1: Using os.system to run a commandos.system('echo This is a test')# Example 2: Running a command and capturing output with subprocessresult = subprocess.run(['date'], capture_output=True, text=True)print('Current date and time:', result.stdout)# Example 3: Executing multiple commandscommands = ['echo First command', 'echo Second command']for cmd in commands:os.system(cmd)# Example 4: Running a command with environment variablesenv = os.environ.copy()env['MY_VAR'] = 'Hello'subprocess.run('echo $MY_VAR', shell=True, env=env)# Example 5: Handling command errorstry:subprocess.check_output(['false_command'], stderr=subprocess.STDOUT)except subprocess.CalledProcessError as e:print('An error occurred:', e.output.decode())
सिस्टम कमांड निष्पादन के लिए उन्नत तकनीकें
पायथन में सिस्टम कमांड निष्पादित करने के एक अन्य पहलू में इसका उपयोग करना शामिल है shlex शेल कमांड पार्सिंग को संभालने के लिए मॉड्यूल। यह मॉड्यूल शेल कमांड को एक सूची प्रारूप में विभाजित करने का एक तरीका प्रदान करता है, जिसे बाद में पास किया जा सकता है subprocess कार्य. यह सुनिश्चित करता है कि रिक्त स्थान के साथ तर्कों को सही ढंग से नियंत्रित किया जाता है। इसके अतिरिक्त, आप इसका उपयोग कर सकते हैं subprocess.PIPE मानक इनपुट, आउटपुट और त्रुटि स्ट्रीम को मूल प्रक्रिया में निर्देशित करने के लिए, अधिक जटिल अंतर-प्रक्रिया संचार की अनुमति देना।
उदाहरण के लिए, कमांड को चेन करना और उनके आउटपुट को क्रमिक रूप से प्रोसेस करना एक कमांड के आउटपुट को दूसरे में पाइप करके प्राप्त किया जा सकता है subprocess.Popen. यह आपको शेल स्क्रिप्ट के समान शक्तिशाली कमांड अनुक्रम बनाने की अनुमति देता है। आप भी उपयोग कर सकते हैं threading एकाधिक उपप्रक्रिया कमांड को एक साथ चलाने के लिए, आपकी स्क्रिप्ट की दक्षता को बढ़ाने के लिए, विशेष रूप से I/O-बाउंड कार्यों से निपटते समय।
पायथन में सिस्टम कमांड निष्पादित करने पर अक्सर पूछे जाने वाले प्रश्न
- मैं शेल कमांड कैसे चला सकता हूं और पायथन में इसका आउटपुट कैसे प्राप्त कर सकता हूं?
- उपयोग subprocess.run साथ capture_output=True कमांड के आउटपुट को कैप्चर करने के लिए।
- के बीच क्या अंतर है subprocess.run और subprocess.Popen?
- subprocess.run एक सरल इंटरफ़ेस है जो कमांड के पूरा होने की प्रतीक्षा करता है subprocess.Popen कमांड निष्पादन पर अधिक नियंत्रण देता है, अतुल्यकालिक संचालन की अनुमति देता है।
- सिस्टम कमांड चलाते समय मैं त्रुटियों से कैसे निपटूँ?
- उपयोग try और except के साथ ब्लॉक करता है subprocess.CalledProcessError त्रुटियों को पकड़ने और संभालने के लिए.
- क्या मैं पर्यावरण चर को एक कमांड में पास कर सकता हूँ?
- हाँ, उपयोग करें env पैरामीटर में subprocess.run या subprocess.Popen पर्यावरण चर पारित करने के लिए।
- मैं क्रम में एकाधिक कमांड कैसे चला सकता हूँ?
- उपयोग subprocess.run या subprocess.Popen पाइप का उपयोग करके लूप या चेन कमांड में subprocess.Popen.
- मैं उस कमांड को कैसे निष्पादित कर सकता हूं जिसके लिए उपयोगकर्ता इनपुट की आवश्यकता है?
- उपयोग subprocess.Popen साथ stdin=subprocess.PIPE और उपयोग करके प्रक्रिया के साथ संवाद करें process.communicate.
- का क्या उपयोग है shlex आदेश निष्पादन में?
- shlex शेल कमांड को सही ढंग से पार्स करने में मदद करता है, यह सुनिश्चित करता है कि रिक्त स्थान के साथ तर्कों को ठीक से संभाला जाए।
- मैं पृष्ठभूमि में कमांड कैसे चलाऊं?
- उपयोग subprocess.Popen प्रक्रिया पूरी होने या उपयोग की प्रतीक्षा किए बिना threading पृष्ठभूमि निष्पादन को प्रबंधित करने के लिए।
सिस्टम कमांड निष्पादन के लिए उन्नत तकनीकें
पायथन में सिस्टम कमांड निष्पादित करने के एक अन्य पहलू में इसका उपयोग करना शामिल है shlex शेल कमांड पार्सिंग को संभालने के लिए मॉड्यूल। यह मॉड्यूल शेल कमांड को एक सूची प्रारूप में विभाजित करने का एक तरीका प्रदान करता है, जिसे बाद में पास किया जा सकता है subprocess कार्य. यह सुनिश्चित करता है कि रिक्त स्थान के साथ तर्कों को सही ढंग से नियंत्रित किया जाता है। इसके अतिरिक्त, आप इसका उपयोग कर सकते हैं subprocess.PIPE मानक इनपुट, आउटपुट और त्रुटि स्ट्रीम को मूल प्रक्रिया में निर्देशित करने के लिए, अधिक जटिल अंतर-प्रक्रिया संचार की अनुमति देना।
उदाहरण के लिए, कमांड को चेन करना और उनके आउटपुट को क्रमिक रूप से प्रोसेस करना एक कमांड के आउटपुट को दूसरे में पाइप करके प्राप्त किया जा सकता है subprocess.Popen. यह आपको शेल स्क्रिप्ट के समान शक्तिशाली कमांड अनुक्रम बनाने की अनुमति देता है। आप भी उपयोग कर सकते हैं threading एकाधिक उपप्रक्रिया आदेशों को एक साथ चलाने के लिए, आपकी स्क्रिप्ट की दक्षता को बढ़ाने के लिए, विशेष रूप से I/O-बाउंड कार्यों से निपटते समय।
पायथन में कमांड निष्पादित करने पर अंतिम विचार
पायथन में बाहरी कमांड निष्पादित करना एक बहुमुखी और शक्तिशाली क्षमता है जो आपके स्क्रिप्टिंग और ऑटोमेशन कार्यों को महत्वपूर्ण रूप से बढ़ा सकती है। का उपयोग करके subprocess मॉड्यूल, आप शेल कमांड चला सकते हैं, उनके आउटपुट कैप्चर कर सकते हैं और त्रुटियों को प्रभावी ढंग से संभाल सकते हैं। os.system फ़ंक्शन बुनियादी कमांड निष्पादन के लिए एक सरल विकल्प प्रदान करता है। इसके अतिरिक्त, को शामिल करते हुए shlex मॉड्यूल जटिल शेल कमांड का उचित पार्सिंग सुनिश्चित करता है। इन तकनीकों को समझने से आप अपने ऑपरेटिंग सिस्टम के कमांड-लाइन टूल की पूरी क्षमता का उपयोग करते हुए पायथन की ताकत का लाभ उठा सकते हैं।