Python Subprocess.Popen مثالیں۔

Python Subprocess Popen Mthaly



Python سب پروسیس ان کارآمد ماڈیولز میں سے ایک ہے جو مختلف شیل کمانڈز، پروسیسز کو چلانے اور دیگر اسکرپٹ یا ایگزیکیوٹیبل فائلز کو Python اسکرپٹ کا استعمال کرنے کے لیے استعمال کیا جاتا ہے۔ یہ ڈیٹا کو ایک عمل سے دوسرے عمل میں بھیجنے اور بچوں کے عمل سے پیدا ہونے والی غلطیوں کو سنبھالنے کے لیے بھی استعمال کیا جا سکتا ہے۔ ذیلی عمل ماڈیول میں بہت سی کلاسیں ہیں جو مختلف مقاصد کے لیے استعمال ہوتی ہیں۔ 'subprocess.Popen' کلاس اس ماڈیول کی کلاسوں میں سے ایک ہے جو بیرونی عمل کے ساتھ تعامل کرنے اور عمل کے درمیان مختلف قسم کے کام انجام دینے کے لیے استعمال ہوتی ہے۔ Python اسکرپٹ میں 'subprocess.Popen' کلاس کے متعدد استعمال اس ٹیوٹوریل میں دکھائے گئے ہیں۔

مواد کا موضوع:

  1. ایک سادہ لینکس کمانڈ چلائیں۔
  2. ان پٹ ڈیٹا کے ساتھ ایک کمانڈ چلائیں۔
  3. ایک ازگر اسکرپٹ چلائیں۔
  4. ذیلی عمل کی خرابی کو ہینڈل کریں۔
  5. سب پروسیس کا کوڈ واپس کریں۔ پوپین
  6. ذیلی عمل کے آؤٹ پٹ کو فائل میں ری ڈائریکٹ کریں۔
  7. Subprocess.Popen کا استعمال کرتے ہوئے ملٹی پروسیسنگ
  8. ان پٹ اور آؤٹ پٹ اسٹریم کو ہینڈل کریں۔ s
  9. ٹائم آؤٹ اور تاخیر کو کنٹرول کریں۔
  10. سٹریمنگ ان پٹ پڑھیں

ایک سادہ لینکس کمانڈ چلائیں۔

'تاریخ' کمانڈ کا استعمال موجودہ نظام کی تاریخ اور وقت کو ظاہر کرنے کے لیے کیا جاتا ہے۔ مندرجہ ذیل اسکرپٹ کے ساتھ ایک Python فائل بنائیں جو ایک ذیلی عمل تخلیق کرتا ہے جو 'تاریخ' کمانڈ کو چلاتا ہے اور اس کمانڈ کی آؤٹ پٹ پرنٹ کرتا ہے:

# ماڈیول درآمد کریں۔

درآمد ذیلی عمل

# ذیلی عمل کے لئے ایک کمانڈ کی وضاحت کریں اور

Popen() فنکشن کا استعمال کرکے #open عمل

آؤٹ پٹ = ذیلی عمل . پوپین ( [ 'تاریخ' ] ، stdout = ذیلی عمل . پائپ )

# عمل کے ساتھ بات چیت کرکے آؤٹ پٹ اور غلطی کو بازیافت کریں۔

stdout ، stderr = آؤٹ پٹ بات چیت ( )

# آؤٹ پٹ پرنٹ کریں۔

پرنٹ کریں ( stdout ڈی کوڈ ( ) )

آؤٹ پٹ:







پچھلی اسکرپٹ پر عمل کرنے کے بعد درج ذیل آؤٹ پٹ ظاہر ہوتا ہے:



  p1



اوپر جائیں





ان پٹ ڈیٹا کے ساتھ ایک کمانڈ چلائیں۔

'-c' آپشن کے ساتھ 'wc' کمانڈ کا استعمال اس کمانڈ کے ساتھ فراہم کردہ سٹرنگ ویلیو کے حروف کی کل تعداد کو گننے کے لیے کیا جاتا ہے۔ مندرجہ ذیل اسکرپٹ کے ساتھ ایک Python فائل بنائیں جو 'wc –c' کمانڈز کو چلانے کے لیے Popen() فنکشن کے ساتھ ایک ذیلی عمل تخلیق کرتی ہے۔ اسکرپٹ پر عمل کرنے کے بعد اسٹرنگ ویلیو ٹرمینل سے لی جاتی ہے اور آؤٹ پٹ میں ان پٹ سٹرنگ کے کل کریکٹر پرنٹ ہوتے ہیں۔

# ماڈیول درآمد کریں۔

درآمد ذیلی عمل

# ذیلی عمل کے لئے ایک کمانڈ کی وضاحت کریں اور

# Popen() فنکشن کا استعمال کرکے عمل کھولیں۔

آؤٹ پٹ = ذیلی عمل . پوپین ( [ 'ڈبلیو سی' ، '-c' ] ، stdout = ذیلی عمل . پائپ )

# عمل کے ساتھ بات چیت کرکے آؤٹ پٹ اور غلطی کو بازیافت کریں۔

stdout ، stderr = آؤٹ پٹ بات چیت ( )

# آؤٹ پٹ پرنٹ کریں۔

پرنٹ کریں ( stdout ڈی کوڈ ( ) )

آؤٹ پٹ:



درج ذیل آؤٹ پٹ 'Python Subprocess Examples' ان پٹ ویلیو کے لیے ظاہر ہوتا ہے:

اوپر جائیں

ایک ازگر اسکرپٹ چلائیں۔

درج ذیل اسکرپٹ کے ساتھ 'sum.py' کے نام سے ایک Python فائل بنائیں جو دو نمبروں کے مجموعے کو شمار کرتی ہے اور یہ نمبر کمانڈ لائن آرگیومینٹس کے طور پر فراہم کیے گئے ہیں:

sum.py

# ضروری ماڈیول درآمد کریں۔

درآمد sys

# کل دلائل شمار کریں۔

n = صرف ( sys . argv )

# پہلی دو دلیل کی قدریں شامل کریں۔

رقم = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )

# اضافے کا نتیجہ پرنٹ کریں۔

پرنٹ کریں ( 'کا مجموعہ ' + sys . argv [ 1 ] + 'اور' + sys . argv [ 2 ] + 'ہے' ، رقم )

ایک ازگر بنائیں فائل کے ساتھ مندرجہ ذیل اسکرپٹ جو ازگر چلائے گی۔ فائل نامزد رقم . py کے ساتھ دو دلائل بنا کر a ذیلی عمل .

# ماڈیول درآمد کریں۔

درآمد ذیلی عمل

# سب پروسیس میں پائیتھن اسکرپٹ چلائیں اور

# Popen() فنکشن کا استعمال کرکے عمل کو کھولیں۔

آؤٹ پٹ = ذیلی عمل . پوپین ( [ 'python3' ، 'sum.py' ، '25' ، '55' ] ، stdout = ذیلی عمل . پائپ ) # عمل کے ساتھ بات چیت کرکے آؤٹ پٹ اور غلطی کو بازیافت کریں۔

stdout ، stderr = آؤٹ پٹ بات چیت ( )

# آؤٹ پٹ پرنٹ کریں۔

پرنٹ کریں ( stdout ڈی کوڈ ( ) )

آؤٹ پٹ:

پچھلی اسکرپٹ پر عمل کرنے کے بعد درج ذیل آؤٹ پٹ ظاہر ہوتا ہے:

اوپر جائیں

`

ذیلی عمل کی خرابی کو ہینڈل کریں۔

مندرجہ ذیل اسکرپٹ کے ساتھ ایک Python فائل بنائیں جو 'Try-except' بلاک کا استعمال کرتے ہوئے ذیلی عمل کی غلطیوں کو ہینڈل کرتی ہے۔ ایک کمانڈ صارف سے لی جاتی ہے اور اسے ذیلی عمل کے ذریعے عمل میں لایا جاتا ہے۔ اگر صارف سے کوئی غلط کمانڈ لیا جاتا ہے تو غلطی کا پیغام ظاہر ہوتا ہے۔

# ماڈیول درآمد کریں۔

درآمد ذیلی عمل

درآمد sys

# صارف سے کمانڈ لیں۔

کمانڈ = ان پٹ ( 'ایک درست کمانڈ درج کریں:' )

کوشش کریں :

# Popen() فنکشن کا استعمال کرکے عمل کھولیں۔

آؤٹ پٹ = ذیلی عمل . پوپین ( [ کمانڈ ] ، stdout = ذیلی عمل . پائپ )

# عمل کے ساتھ بات چیت کرکے آؤٹ پٹ اور غلطی کو بازیافت کریں۔

stdout ، stderr = آؤٹ پٹ بات چیت ( )

# آؤٹ پٹ پرنٹ کریں۔

پرنٹ کریں ( stdout ڈی کوڈ ( ) )

سوائے :

پرنٹ کریں ( 'خرابی:' ، sys . exc_info ( ) )

آؤٹ پٹ:

درج ذیل آؤٹ پٹ ظاہر ہوتا ہے اگر 'pwd' کمانڈ کو ان پٹ کے طور پر لیا جائے جو کہ ایک درست کمانڈ ہے:

  p4-1

درج ذیل آؤٹ پٹ ظاہر ہوتا ہے اگر 'usr' کمانڈ کو ان پٹ کے طور پر لیا جائے جو کہ ایک درست کمانڈ ہے:

  p4-2

اوپر جائیں

سب پروسیس کا کوڈ واپس کریں۔ پوپین

مندرجہ ذیل اسکرپٹ کے ساتھ ایک Python فائل بنائیں جو موجودہ مقام سے تمام Python فائلوں کی فہرست حاصل کرنے کے لیے ذیلی عمل کے ذریعے 'ls' کمانڈ پر عمل کرے۔ سکرپٹ ذیلی عمل کو مکمل کرنے کا انتظار کرتا ہے اور واپسی کوڈ پرنٹ کرتا ہے۔

# ماڈیول درآمد کریں۔

درآمد ذیلی عمل

درآمد sys

# کمانڈ سیٹ کریں۔

کمانڈ = [ 'ls' ، '-l' ، '*.py' ]

کوشش کریں :

# Popen() فنکشن کا استعمال کرکے عمل کھولیں۔

آؤٹ پٹ = ذیلی عمل . پوپین ( کمانڈ ، stdout = ذیلی عمل . پائپ ،

stderr = ذیلی عمل . پائپ ، متن = سچ ہے۔ )

# عمل مکمل ہونے کا انتظار کریں۔

retCode = آؤٹ پٹ انتظار کرو ( )

# واپسی کوڈ پرنٹ کریں۔

پرنٹ کریں ( 'واپسی کوڈ:' ، retCode )

سوائے :

#غلط کے لیے غلطی کا پیغام پرنٹ کریں۔

پرنٹ کریں ( 'خرابی:' ، sys . exc_info ( ) )

آؤٹ پٹ:

پچھلی اسکرپٹ پر عمل کرنے کے بعد اسی طرح کی آؤٹ پٹ ظاہر ہوتی ہے:

اوپر جائیں

ذیلی عمل کے آؤٹ پٹ کو فائل میں ری ڈائریکٹ کریں۔

مندرجہ ذیل اسکرپٹ کے ساتھ ایک Python فائل بنائیں جو ٹیکسٹ فائل میں سب پروسیس کی آؤٹ پٹ لکھتی ہے۔ ذیلی عمل کے ذریعے عمل میں لائی گئی کمانڈ صارف سے لی جاتی ہے۔

# امپورٹ ماڈیول

درآمد ذیلی عمل

# فائل نام کی وضاحت کریں۔

فائل کا نام = 'outfile.txt'

# پنگ کمانڈ لیں۔

cmd = ان پٹ ( 'پنگ کمانڈ درج کریں:' )

# لی گئی ان پٹ کو جگہ کی بنیاد پر تقسیم کریں۔

args = cmd . تقسیم ( )

# فائل میں کمانڈ آؤٹ پٹ لکھیں۔

کے ساتھ کھلا ( فائل کا نام ، 'میں' ) کے طور پر آؤٹ ڈیٹا:

عمل = ذیلی عمل . پوپین ( args ، stdout = آؤٹ ڈیٹا )

# عمل مکمل ہونے کا انتظار کریں۔

واپسی_کوڈ = عمل انتظار کرو ( )

آؤٹ پٹ:

مندرجہ ذیل آؤٹ پٹ کے مطابق، 'ping -c 3 www.google.com 'کمانڈ صارف سے لی جاتی ہے اور 'کیٹ' کمانڈ کا استعمال فائل کے مواد کو ظاہر کرنے کے لیے کیا جاتا ہے جو ذیلی عمل کے ذریعے لکھا گیا ہے:

اوپر جائیں

Subprocess.Popen کا استعمال کرتے ہوئے ملٹی پروسیسنگ

مندرجہ ذیل اسکرپٹ کے ساتھ ایک Python فائل بنائیں جہاں سب پروسیسنگ کا استعمال کرتے ہوئے ملٹی پروسیسنگ کا استعمال دکھایا گیا ہے۔ یہاں، display_msg() نامی فنکشن کو ملٹی پروسیسنگ کا استعمال کرتے ہوئے متعدد بار کہا جاتا ہے۔

# ضروری ماڈیولز درآمد کریں۔

درآمد ملٹی پروسیسنگ

درآمد ذیلی عمل

# اس فنکشن کی وضاحت کریں جسے ملٹی پروسیسنگ کے ذریعہ بلایا جائے گا۔

def display_msg ( n ) :

# فارمیٹ() فنکشن کے ساتھ کمانڈ کی وضاحت کریں۔

cmd = 'ایکو 'ازگر پروگرامنگ'' . فارمیٹ ( n )

# Popen() فنکشن کا استعمال کرکے عمل کھولیں۔

عمل = ذیلی عمل . پوپین ( cmd ، شیل = سچ ہے۔ ، stdout = ذیلی عمل . پائپ )

# عمل کے ساتھ بات چیت کرکے آؤٹ پٹ اور غلطی کو بازیافت کریں۔

stdout ، غلطی = عمل بات چیت ( )

# آؤٹ پٹ پرنٹ کریں۔

پرنٹ کریں ( stdout ڈی کوڈ ( ) )

#ملٹی پروسیسنگ پول بنا کر فنکشن کو 5 بار کال کریں۔

کے ساتھ ملٹی پروسیسنگ پول ( ملٹی پروسیسنگ cpu_count ( ) ) کے طور پر mp:

# فنکشن کا نقشہ بنائیں

mp نقشہ ( display_msg ، رینج ( 1 ، 5 ) )

آؤٹ پٹ:

پچھلی اسکرپٹ پر عمل کرنے کے بعد درج ذیل آؤٹ پٹ ظاہر ہوتا ہے:

اوپر جائیں

ان پٹ اور آؤٹ پٹ اسٹریمز کو ہینڈل کریں۔

اس مثال کی Python اسکرپٹ بنانے سے پہلے درج ذیل مواد کے ساتھ 'test.txt' کے نام سے ایک ٹیکسٹ فائل بنائیں۔

test.txt

پرل

ازگر

bash

php

مندرجہ ذیل اسکرپٹ کے ساتھ ایک Python فائل بنائیں جو 'test.txt' فائل کے مواد کو پڑھنے کے لیے ایک ذیلی عمل اور اس ٹیکسٹ فائل میں کسی خاص لفظ کو تلاش کرنے کے لیے دوسرا ذیلی عمل استعمال کرتی ہے۔ یہاں، لفظ 'python' کو 'test.txt فائل' میں تلاش کیا جاتا ہے جس میں یہ لفظ موجود ہے۔

# ماڈیول درآمد کریں۔

درآمد ذیلی عمل

#ان پٹ اسٹریم کے لیے ایک عمل کی وضاحت کریں۔

اس عمل میں = ذیلی عمل . پوپین ( [ 'کیٹ' ، 'test.txt' ] ، stdout = ذیلی عمل . پائپ ، متن = ٹرو > # آؤٹ پٹ اسٹریم کے لیے ایک عمل کی وضاحت کریں۔

باہر_عمل = ذیلی عمل . پوپین (

[ 'گرفت' ، 'ازگر' ] ، stdin = اس عمل میں. stdout ،

stdout = ذیلی عمل . پائپ ، متن = سچ ہے۔ )

# ان پٹ اور آؤٹ پٹ کے عمل کے آؤٹ پٹ کو اسٹور کریں۔

آؤٹ پٹ ، _ = باہر_عمل بات چیت ( )

# آؤٹ پٹ پرنٹ کریں۔

پرنٹ کریں ( 'آؤٹ پٹ:' ، آؤٹ پٹ )

آؤٹ پٹ:

اسکرپٹ پر عمل کرنے کے بعد درج ذیل آؤٹ پٹ ظاہر ہوتا ہے:

اوپر جائیں

ٹائمر کا استعمال کرتے ہوئے ذیلی عمل کو کنٹرول کریں۔

مندرجہ ذیل اسکرپٹ کے ساتھ ایک ازگر فائل بنائیں جو سب پروسیس کا استعمال کرتے ہوئے کمانڈ کو چلانے کے لیے ٹائمر کا استعمال کرتی ہے۔ یہاں، ٹائمر کو شروع کرنے کے لیے 'Try-except' بلاک استعمال کیا جاتا ہے اور 'آخر میں' بلاک ٹائمر کو منسوخ کرنے کے لیے استعمال ہوتا ہے۔

# ذیلی عمل ماڈیول درآمد کریں۔

درآمد ذیلی عمل

# ٹائمر ماڈیول درآمد کریں۔

سے تھریڈنگ درآمد ٹائمر

# کمانڈ کی وضاحت کریں۔

cmd = [ 'پنگ' ، 'www.example.com' ]

# عمل کو کھولیں۔

ص = ذیلی عمل . پوپین (

cmd ، stdout = ذیلی عمل . پائپ ، stderr = ذیلی عمل . پائپ )

# ٹائمر کی وضاحت کریں۔

ٹائمر = ٹائمر ( 2 ، لیمبڈا عمل: عمل۔ مار ڈالو ( ) ، [ ص ] )

کوشش کریں :

# ٹائمر شروع کریں۔

ٹائمر شروع ( )

# آؤٹ پٹ پڑھیں

stdout ، _ = ص بات چیت ( )

# پرنٹ آؤٹ پٹ

پرنٹ کریں ( stdout ڈی کوڈ ( ) )

سوائے :

#غلط کے لیے غلطی کا پیغام پرنٹ کریں۔

پرنٹ کریں ( 'خرابی:' ، sys . exc_info ( ) )

آخر میں :

# ٹائمر بند کرو

ٹائمر منسوخ ( )

آؤٹ پٹ:

اسکرپٹ پر عمل کرنے کے بعد درج ذیل آؤٹ پٹ ظاہر ہوتا ہے:

اوپر جائیں

اسٹریمنگ ان پٹ پڑھیں

ایک Python فائل بنائیں جو 'while' لوپ کا استعمال کرتے ہوئے سب پروسیس آؤٹ پٹ کے مواد کو پڑھے اور مواد کو متغیر میں اسٹور کرے۔ اس متغیر کا مواد بعد میں پرنٹ کیا جاتا ہے۔ یہاں، 'curl' کمانڈ کو ذیلی عمل میں استعمال کیا جاتا ہے۔ www.google.com URL

# امپورٹ ماڈیول

درآمد ذیلی عمل

# کمانڈ کی وضاحت کریں۔

cmd = [ 'کرل' ، 'www.example.com' ]

ص = ذیلی عمل . پوپین ( cmd ، stdout = ذیلی عمل . پائپ ،

stderr = ذیلی عمل . پائپ ، متن = سچ ہے۔ >

# آؤٹ پٹ متغیر کو شروع کریں۔

آؤٹ پٹ = ''

جبکہ سچ ہے۔ :

# پروسیس آؤٹ پٹ لائن کو لائن کے ذریعے پڑھیں

ln = ص stdout . ریڈ لائن ( )

سب پروسیس ختم ہونے پر # لوپ سے ختم کریں۔

اگر نہیں ln:

توڑنا

آؤٹ پٹ = آؤٹ پٹ + ln

# لائن پرنٹ کریں۔

پرنٹ کریں ( آؤٹ پٹ )

# عمل مکمل کرنے کے بعد واپسی کوڈ حاصل کریں۔

واپسی_کوڈ = ص انتظار کرو ( )

# واپسی کوڈ پرنٹ کریں۔

پرنٹ کریں ( 'واپسی کوڈ:' ، واپسی_کوڈ )

آؤٹ پٹ:

تین آؤٹ پٹ کا آخری حصہ مندرجہ ذیل تصویر میں دکھایا گیا ہے۔ ذیلی عمل کو مکمل کرنے کے بعد واپسی کوڈ 0 ہے:

اوپر جائیں

نتیجہ

Python subprocess.Popen() کے مختلف استعمال اس ٹیوٹوریل میں متعدد Python اسکرپٹس کا استعمال کرتے ہوئے دکھائے گئے ہیں جو Python کے صارفین کو اس فنکشن کے بنیادی استعمال کو جاننے میں مدد کریں گے۔