পাইথনে কিভাবে এক্সটার্নাল কমান্ড এক্সিকিউট করবেন

পাইথনে কিভাবে এক্সটার্নাল কমান্ড এক্সিকিউট করবেন
পাইথনে কিভাবে এক্সটার্নাল কমান্ড এক্সিকিউট করবেন

পাইথন থেকে সিস্টেম কমান্ড চালানো হচ্ছে

পাইথন আপনার স্ক্রিপ্ট থেকে সরাসরি বাহ্যিক প্রোগ্রাম এবং সিস্টেম কমান্ড কার্যকর করার জন্য শক্তিশালী ক্ষমতা প্রদান করে। এই বৈশিষ্ট্যটি আপনাকে আপনার অপারেটিং সিস্টেমে উপলব্ধ সরঞ্জামগুলির বিশাল অ্যারের সুবিধা নেওয়ার সময় পাইথনের সরলতা লাভ করতে দেয়।

আপনি পুনরাবৃত্তিমূলক কাজগুলিকে স্বয়ংক্রিয় করছেন বা জটিল ওয়ার্কফ্লোগুলিকে একীভূত করছেন না কেন, পাইথনে সিস্টেম কমান্ডগুলি কীভাবে কল করবেন তা বোঝা আপনার উত্পাদনশীলতাকে উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে। এই নির্দেশিকাতে, আমরা এটি কার্যকরভাবে অর্জন করার জন্য বিভিন্ন পদ্ধতি অন্বেষণ করব।

আদেশ বর্ণনা
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())

পাইথনের সাথে সিস্টেম টাস্ক স্বয়ংক্রিয় করা

os.system এবং subprocess মডিউল ব্যবহার করে

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 মডিউল জটিল শেল কমান্ডের সঠিক পার্সিং নিশ্চিত করে। এই কৌশলগুলি বোঝার ফলে আপনি আপনার অপারেটিং সিস্টেমের কমান্ড-লাইন সরঞ্জামগুলির সম্পূর্ণ সম্ভাবনাকে কাজে লাগানোর সময় পাইথনের শক্তিগুলিকে কাজে লাগাতে পারবেন৷