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

1. ماژول os و تابع os.system

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

  • ساده بودن استفاده: استفاده از os.system بسیار ساده است. کافیست دستوری که می‌خواهید اجرا کنید را به عنوان یک رشته به این تابع بدهید.
    import os
    os.system('ls')
    
  • برگشت وضعیت: این تابع فقط وضعیت اجرا (exit status) دستور را برمی‌گرداند و به شما نشان می‌دهد که آیا دستور با موفقیت اجرا شده یا خیر.
  • محیط محدود: وقتی از os.system استفاده می‌کنید، تنها می‌توانید خروجی استاندارد را مشاهده کنید و دسترسی به خروجی‌های خطا (error stdout) یا خروجی اصلی (standard output) ندارید.

2. ماژول subprocess

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

  • برگشت خروجی: یکی از نکات برجسته subprocess این است که به شما این امکان را می‌دهد تا خروجی دستورات را دریافت کنید. به عنوان مثال با استفاده از subprocess.run می‌توانید خروجی استاندارد را به راحتی دریافت کنید.
    import subprocess
    result = subprocess.run(['ls'], capture_output=True, text=True)
    print(result.stdout)
    
  • دسترسی به خطاها: با subprocess می‌توانید به خروجی خطا نیز دسترسی پیدا کنید که این ویژگی به عیب‌یابی بسیار کمک می‌کند.
  • کنترل بیشتر: با استفاده از subprocess می‌توانید به جزئیات بیشتری از جمله اوردن مجموعه‌ای از ورودی‌ها، زمان بندی و غیره دسترسی پیدا کنید.

آموزش مقدماتی پایتون

3. مقایسه عملکرد

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

4. نتیجه‌ گیری

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

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