كيفية تنفيذ الأوامر الخارجية في بايثون

Python subprocess

تشغيل أوامر النظام من بايثون

توفر Python إمكانات قوية لتنفيذ البرامج الخارجية وأوامر النظام مباشرة من البرامج النصية الخاصة بك. تتيح لك هذه الميزة الاستفادة من بساطة Python مع الاستفادة من المجموعة الواسعة من الأدوات المتوفرة في نظام التشغيل الخاص بك.

سواء كنت تقوم بأتمتة المهام المتكررة أو دمج مسارات العمل المعقدة، فإن فهم كيفية استدعاء أوامر النظام في Python يمكن أن يعزز إنتاجيتك بشكل كبير. وفي هذا الدليل، سنستكشف طرقًا مختلفة لتحقيق ذلك بفعالية.

يأمر وصف
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 يحدد متغيرات البيئة للعملية الجديدة.

فهم تنفيذ البرنامج النصي في بايثون

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

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

تنفيذ الأوامر الخارجية في بايثون

استخدام وحدة العمليات الفرعية في بايثون

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())

التقنيات المتقدمة لتنفيذ أوامر النظام

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

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

  1. كيف يمكنني تشغيل أمر shell والحصول على مخرجاته في بايثون؟
  2. يستخدم مع لالتقاط إخراج الأمر.
  3. ماهو الفرق بين و ؟
  4. هي واجهة أبسط تنتظر اكتمال الأمر، بينما يعطي مزيدًا من التحكم في تنفيذ الأوامر، مما يسمح بالتشغيل غير المتزامن.
  5. كيف أتعامل مع الأخطاء عند تشغيل أمر النظام؟
  6. يستخدم و كتل مع للقبض على الأخطاء والتعامل معها.
  7. هل يمكنني تمرير متغيرات البيئة إلى أمر؟
  8. نعم استخدم المعلمة في أو لتمرير متغيرات البيئة.
  9. كيف يمكنني تشغيل أوامر متعددة بالتسلسل؟
  10. يستخدم أو في أوامر حلقة أو سلسلة باستخدام الأنابيب مع .
  11. كيف يمكنني تنفيذ أمر يتطلب إدخال المستخدم؟
  12. يستخدم مع والتواصل مع العملية باستخدام .
  13. ما هي الفائدة من في تنفيذ الأمر؟
  14. يساعد في تحليل أوامر الصدفة بشكل صحيح، مما يضمن التعامل مع الوسائط ذات المسافات بشكل صحيح.
  15. كيف يمكنني تشغيل أمر في الخلفية؟
  16. يستخدم دون انتظار اكتمال العملية أو استخدامها لإدارة التنفيذ في الخلفية.

التقنيات المتقدمة لتنفيذ أوامر النظام

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

على سبيل المثال، يمكن تحقيق تسلسل الأوامر ومعالجة مخرجاتها بشكل تسلسلي عن طريق توصيل مخرجات أمر إلى آخر باستخدام . يتيح لك هذا إنشاء تسلسلات أوامر قوية مشابهة لما ستفعله في برنامج نصي Shell. تستطيع ايضا استخذام لتشغيل أوامر متعددة للعملية الفرعية بشكل متزامن ، تعزيز كفاءة البرنامج النصي الخاص بك ، خاصة عند التعامل مع مهام I/O المرتبطة.

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