Linux Automation

إتقان التحكم في محطة لينكس باستخدام بايثون

Spread the love

تستكشف هذه المقالة تقنيات التحكم في محطات لينكس وتفاعل معها باستخدام بايثون. سنغطي طرقًا متنوعة، من تنفيذ الأوامر البسيطة إلى سيناريوهات أكثر تقدمًا تتضمن جلسات محطة مستمرة.

محتويات

فتح محطة جديدة وتشغيل الأوامر

أبسط طريقة لفتح محطة جديدة وتنفيذ الأوامر هي استخدام وحدة subprocess. يتضمن هذا إطلاق عملية محاكي محطة جديدة و تمرير الأمر كوسيطة. تختلف الأوامر المحددة لفتح محطة حسب بيئة سطح المكتب الخاصة بك (مثل: gnome-terminal، konsole، xterm).

import subprocess

def run_command_in_new_terminal(command, terminal_command="gnome-terminal"):
    """يفتح محطة جديدة وينفذ الأمر المحدد.

    Args:
        command: الأمر الذي سيتم تنفيذه.
        terminal_command: الأمر لبدء تشغيل محاكي المحطة. القيمة الافتراضية هي 'gnome-terminal'.
    """
    try:
        subprocess.run([terminal_command, '--', 'bash', '-c', command + ' ; exec bash'])  #يحافظ على المحطة مفتوحة
        print(f"تم تنفيذ الأمر '{command}' في محطة جديدة.")
    except FileNotFoundError:
        print(f"خطأ: لم يتم العثور على {terminal_command}. يرجى التأكد من تثبيته وتواجده في مسار PATH الخاص بك.")
    except subprocess.CalledProcessError as e:
        print(f"خطأ في تنفيذ الأمر: {e}")

run_command_in_new_terminal("ls -l")
run_command_in_new_terminal("top", terminal_command="xterm") # مثال مع xterm

يعالج هذا الإصدار المحسن محاكيات المحطات المختلفة ويستخدم exec bash للحفاظ على المحطة مفتوحة بعد انتهاء الأمر.

التحقق من إصدار بايثون

إن تحديد إصدار بايثون أمر مباشر باستخدام وحدة sys:

import sys

def get_python_version():
    """يطبع إصدار بايثون الحالي."""
    print(f"إصدار بايثون: {sys.version}")

get_python_version()

الحفاظ على المحطات نشطة

للحفاظ على محطة مفتوحة بعد اكتمال الأمر، تأكد من أن الأمر الخاص بك يعمل إلى أجل غير مسمى أو يستخدم آلية للحفاظ على نشاط shell. على سبيل المثال، بدلاً من أمر مرة واحدة مثل ls -l، استخدم أمرًا ينتج بيانات باستمرار، مثل tail -f /var/log/syslog، أو قم بتضمين أمر يحافظ على تشغيل shell (كما هو موضح في المثال الأول).

تقنيات متقدمة لـ subprocess

للتفاعلات الأكثر تعقيدًا، توفر subprocess.Popen() تحكمًا أدق. يسمح بالتواصل ثنائي الاتجاه مع العملية التي تم إنشاؤها عبر مدخلاتها القياسية ومخرجاتها وتدفقات أخطائها. ومع ذلك، فإن التلاعب المباشر بمحطة مفتوحة بالفعل يتطلب تقنيات أكثر تقدمًا، قد تتضمن محطات زائفة (ptys).

خاتمة

قدمت هذه المقالة طرقًا متنوعة لإدارة محطات لينكس عبر بايثون، بدءًا من تنفيذ الأوامر البسيطة إلى التحكم الأكثر تطوراً. وحدة subprocess أساسية لهذه المهام. تذكر اختيار محاكي المحطة المناسب وتكييف الأوامر مع بيئتك المحددة. بالنسبة للسيناريوهات التفاعلية للغاية أو التحكم المعقد، استكشف وحدة pty للحصول على معالجة محطة أكثر تقدمًا.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *