पायथन में बाहरी कमांड कैसे निष्पादित करें

पायथन में बाहरी कमांड कैसे निष्पादित करें
पायथन में बाहरी कमांड कैसे निष्पादित करें

पायथन से सिस्टम कमांड चलाना

पायथन आपकी स्क्रिप्ट से सीधे बाहरी प्रोग्राम और सिस्टम कमांड निष्पादित करने के लिए शक्तिशाली क्षमताएं प्रदान करता है। यह सुविधा आपको अपने ऑपरेटिंग सिस्टम में उपलब्ध टूल की विशाल श्रृंखला का लाभ उठाते हुए पायथन की सरलता का लाभ उठाने की अनुमति देती है।

चाहे आप दोहराए जाने वाले कार्यों को स्वचालित कर रहे हों या जटिल वर्कफ़्लो को एकीकृत कर रहे हों, पायथन में सिस्टम कमांड को कॉल करने का तरीका समझने से आपकी उत्पादकता में उल्लेखनीय वृद्धि हो सकती है। इस गाइड में, हम इसे प्रभावी ढंग से प्राप्त करने के लिए विभिन्न तरीकों का पता लगाएंगे।

आज्ञा विवरण
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 command
subprocess.run(['echo', 'Hello, World!'])
# Example 2: Capturing the output of a command
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
# Example 3: Running a command with shell=True
subprocess.run('echo Hello from the shell', shell=True)
# Example 4: Checking the return code
result = subprocess.run(['ls', 'nonexistentfile'], capture_output=True)
if result.returncode != 0:
    print('Command failed')
# Example 5: Using subprocess.Popen for more control
process = subprocess.Popen(['ping', 'localhost'], stdout=subprocess.PIPE)
while True:
    output = process.stdout.readline()
    if output == b'' and process.poll() is not None:
        break
    if output:
        print(output.strip().decode())

पायथन के साथ सिस्टम कार्यों को स्वचालित करना

ओएस.सिस्टम और सबप्रोसेस मॉड्यूल का उपयोग करना

import os
import subprocess
# Example 1: Using os.system to run a command
os.system('echo This is a test')
# Example 2: Running a command and capturing output with subprocess
result = subprocess.run(['date'], capture_output=True, text=True)
print('Current date and time:', result.stdout)
# Example 3: Executing multiple commands
commands = ['echo First command', 'echo Second command']
for cmd in commands:
    os.system(cmd)
# Example 4: Running a command with environment variables
env = os.environ.copy()
env['MY_VAR'] = 'Hello'
subprocess.run('echo $MY_VAR', shell=True, env=env)
# Example 5: Handling command errors
try:
    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-बाउंड कार्यों से निपटते समय।

पायथन में सिस्टम कमांड निष्पादित करने पर अक्सर पूछे जाने वाले प्रश्न

  1. मैं शेल कमांड कैसे चला सकता हूं और पायथन में इसका आउटपुट कैसे प्राप्त कर सकता हूं?
  2. उपयोग subprocess.run साथ capture_output=True कमांड के आउटपुट को कैप्चर करने के लिए।
  3. के बीच क्या अंतर है subprocess.run और subprocess.Popen?
  4. subprocess.run एक सरल इंटरफ़ेस है जो कमांड के पूरा होने की प्रतीक्षा करता है subprocess.Popen कमांड निष्पादन पर अधिक नियंत्रण देता है, अतुल्यकालिक संचालन की अनुमति देता है।
  5. सिस्टम कमांड चलाते समय मैं त्रुटियों से कैसे निपटूँ?
  6. उपयोग try और except के साथ ब्लॉक करता है subprocess.CalledProcessError त्रुटियों को पकड़ने और संभालने के लिए.
  7. क्या मैं पर्यावरण चर को एक कमांड में पास कर सकता हूँ?
  8. हाँ, उपयोग करें env पैरामीटर में subprocess.run या subprocess.Popen पर्यावरण चर पारित करने के लिए।
  9. मैं क्रम में एकाधिक कमांड कैसे चला सकता हूँ?
  10. उपयोग subprocess.run या subprocess.Popen पाइप का उपयोग करके लूप या चेन कमांड में subprocess.Popen.
  11. मैं उस कमांड को कैसे निष्पादित कर सकता हूं जिसके लिए उपयोगकर्ता इनपुट की आवश्यकता है?
  12. उपयोग subprocess.Popen साथ stdin=subprocess.PIPE और उपयोग करके प्रक्रिया के साथ संवाद करें process.communicate.
  13. का क्या उपयोग है shlex आदेश निष्पादन में?
  14. shlex शेल कमांड को सही ढंग से पार्स करने में मदद करता है, यह सुनिश्चित करता है कि रिक्त स्थान के साथ तर्कों को ठीक से संभाला जाए।
  15. मैं पृष्ठभूमि में कमांड कैसे चलाऊं?
  16. उपयोग subprocess.Popen प्रक्रिया पूरी होने या उपयोग की प्रतीक्षा किए बिना threading पृष्ठभूमि निष्पादन को प्रबंधित करने के लिए।

सिस्टम कमांड निष्पादन के लिए उन्नत तकनीकें

पायथन में सिस्टम कमांड निष्पादित करने के एक अन्य पहलू में इसका उपयोग करना शामिल है shlex शेल कमांड पार्सिंग को संभालने के लिए मॉड्यूल। यह मॉड्यूल शेल कमांड को एक सूची प्रारूप में विभाजित करने का एक तरीका प्रदान करता है, जिसे बाद में पास किया जा सकता है subprocess कार्य. यह सुनिश्चित करता है कि रिक्त स्थान के साथ तर्कों को सही ढंग से नियंत्रित किया जाता है। इसके अतिरिक्त, आप इसका उपयोग कर सकते हैं subprocess.PIPE मानक इनपुट, आउटपुट और त्रुटि स्ट्रीम को मूल प्रक्रिया में निर्देशित करने के लिए, अधिक जटिल अंतर-प्रक्रिया संचार की अनुमति देना।

उदाहरण के लिए, कमांड को चेन करना और उनके आउटपुट को क्रमिक रूप से प्रोसेस करना एक कमांड के आउटपुट को दूसरे में पाइप करके प्राप्त किया जा सकता है subprocess.Popen. यह आपको शेल स्क्रिप्ट के समान शक्तिशाली कमांड अनुक्रम बनाने की अनुमति देता है। आप भी उपयोग कर सकते हैं threading एकाधिक उपप्रक्रिया आदेशों को एक साथ चलाने के लिए, आपकी स्क्रिप्ट की दक्षता को बढ़ाने के लिए, विशेष रूप से I/O-बाउंड कार्यों से निपटते समय।

पायथन में कमांड निष्पादित करने पर अंतिम विचार

पायथन में बाहरी कमांड निष्पादित करना एक बहुमुखी और शक्तिशाली क्षमता है जो आपके स्क्रिप्टिंग और ऑटोमेशन कार्यों को महत्वपूर्ण रूप से बढ़ा सकती है। का उपयोग करके subprocess मॉड्यूल, आप शेल कमांड चला सकते हैं, उनके आउटपुट कैप्चर कर सकते हैं और त्रुटियों को प्रभावी ढंग से संभाल सकते हैं। os.system फ़ंक्शन बुनियादी कमांड निष्पादन के लिए एक सरल विकल्प प्रदान करता है। इसके अतिरिक्त, को शामिल करते हुए shlex मॉड्यूल जटिल शेल कमांड का उचित पार्सिंग सुनिश्चित करता है। इन तकनीकों को समझने से आप अपने ऑपरेटिंग सिस्टम के कमांड-लाइन टूल की पूरी क्षमता का उपयोग करते हुए पायथन की ताकत का लाभ उठा सकते हैं।