کار با ماژول subprocess

  • مدرس : علی بیگدلی
  • تاریخ انتشار: 1404/05/12
  • تعداد بازدید: 22

معرفی ماژول subprocess در پایتون

ماژول subprocess در پایتون برای اجرای دستورات سیستم‌عامل و ایجاد ارتباط با برنامه‌های خارجی استفاده می‌شود. این ماژول جایگزین مدرن‌تر و امن‌تر برای توابع قدیمی مانند os.system و popen است و امکان کنترل دقیق ورودی/خروجی فرآیندها را فراهم می‌کند.

اجرای ساده یک دستور

import subprocess

subprocess.run(["ls", "-l"])

تابع run() رایج‌ترین روش برای اجرای یک دستور خارجی است. آرگومان‌ها باید به صورت لیستی از رشته‌ها داده شوند.

ذخیره خروجی دستور

result = subprocess.run(["echo", "Hello World"], capture_output=True, text=True)
print(result.stdout)

پارامتر capture_output=True خروجی استاندارد و خطای استاندارد را ضبط می‌کند. استفاده از text=True نیز باعث تبدیل خروجی به رشته (به جای بایت) می‌شود.

اجرای دستور با ورودی

proc = subprocess.run(["python3"], input="print('hi')", capture_output=True, text=True)
print(proc.stdout)

بررسی خطاها

try:
    subprocess.run(["false"], check=True)
except subprocess.CalledProcessError as e:
    print("Command failed:", e)

استفاده از check=True باعث می‌شود اگر کد بازگشتی (exit code) غیر صفر باشد، خطا ایجاد شود.

اجرای دستورات پیچیده با shell

subprocess.run("echo $HOME", shell=True)

اگر نیاز به اجرای دستورات در یک محیط شِل باشد (مثلاً استفاده از متغیرهای محیطی یا pipe)، باید shell=True استفاده شود. اما استفاده از این حالت ممکن است خطر امنیتی ایجاد کند، به‌ویژه با ورودی‌های کاربر.

خواندن همزمان خروجی با Popen

from subprocess import Popen, PIPE

p = Popen(["echo", "hello"], stdout=PIPE)
out, _ = p.communicate()
print(out.decode())

کلاس Popen برای کنترل دقیق‌تر فرآیندها استفاده می‌شود، از جمله خواندن یا نوشتن همزمان روی ورودی/خروجی.

جمع‌بندی

ماژول subprocess امکان اجرای امن و کنترل‌شده دستورات خارجی را فراهم می‌کند. این ماژول قابلیت‌هایی مانند گرفتن خروجی، کنترل خطا، ارسال ورودی، و استفاده از شل را پشتیبانی می‌کند و برای اسکریپت‌هایی که نیاز به تعامل با سیستم‌عامل یا برنامه‌های دیگر دارند، ضروری است.

ثبت دیدگاه


نکته: آدرس ایمیل شما منتشر نخواهد شد

دیدگاه کاربران (0)


هیچ دیدگاهی ثبت نشده است. می‌توانید اولین نفر باشید.