Python Subprocess.Popen উদাহরণ

Python Subprocess Popen Udaharana



পাইথন সাবপ্রসেস হল একটি দরকারী মডিউল যা বিভিন্ন শেল কমান্ড, প্রসেস চালানো এবং পাইথন স্ক্রিপ্ট ব্যবহার করে অন্য স্ক্রিপ্ট বা এক্সিকিউটেবল ফাইল চালানোর জন্য ব্যবহৃত হয়। এটি একটি প্রক্রিয়া থেকে অন্য প্রক্রিয়ায় ডেটা পুনঃনির্দেশিত করার জন্য এবং শিশু প্রক্রিয়াগুলির দ্বারা উত্পন্ন ত্রুটিগুলি পরিচালনা করার জন্যও ব্যবহার করা যেতে পারে। সাবপ্রসেস মডিউলটিতে অনেকগুলি ক্লাস রয়েছে যা বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়। 'subprocess.Popen' ক্লাস এই মডিউলের একটি ক্লাস যা বাহ্যিক প্রক্রিয়াগুলির সাথে ইন্টারঅ্যাক্ট করতে এবং প্রক্রিয়াগুলির মধ্যে বিভিন্ন ধরণের কাজ সম্পাদন করতে ব্যবহৃত হয়। পাইথন স্ক্রিপ্টে 'subprocess.Popen' ক্লাসের একাধিক ব্যবহার এই টিউটোরিয়ালে দেখানো হয়েছে।

বিষয়বস্তুর বিষয়:

  1. একটি সাধারণ লিনাক্স কমান্ড চালান
  2. ইনপুট ডেটা সহ একটি কমান্ড চালান
  3. একটি পাইথন স্ক্রিপ্ট চালান
  4. সাবপ্রসেস ত্রুটি পরিচালনা করুন
  5. সাবপ্রসেসের কোডটি ফেরত দিন
  6. সাবপ্রসেসের আউটপুটকে ফাইলে রিডাইরেক্ট করুন
  7. Subprocess.Popen ব্যবহার করে মাল্টিপ্রসেসিং
  8. ইনপুট এবং আউটপুট স্ট্রীম পরিচালনা করুন s
  9. টাইমআউট এবং বিলম্ব নিয়ন্ত্রণ করুন
  10. একটি স্ট্রিমিং ইনপুট পড়ুন

একটি সাধারণ লিনাক্স কমান্ড চালান

'তারিখ' কমান্ডটি বর্তমান সিস্টেম তারিখ এবং সময় প্রদর্শন করতে ব্যবহৃত হয়। নিম্নলিখিত স্ক্রিপ্টের সাথে একটি পাইথন ফাইল তৈরি করুন যা একটি সাবপ্রসেস তৈরি করে যা 'তারিখ' কমান্ড চালায় এবং এই কমান্ডের আউটপুট মুদ্রণ করে:

# মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

# সাবপ্রসেসের জন্য একটি কমান্ড সংজ্ঞায়িত করুন এবং

Popen() ফাংশন ব্যবহার করে #open প্রক্রিয়া

আউটপুট = সাবপ্রসেস . পোপেন ( [ 'তারিখ' ] , stdout = সাবপ্রসেস . পাইপ )

# প্রক্রিয়াটির সাথে যোগাযোগ করে আউটপুট এবং ত্রুটি পুনরুদ্ধার করুন

stdout , stderr = আউটপুট যোগাযোগ ( )

# আউটপুট প্রিন্ট করুন

ছাপা ( stdout ডিকোড ( ) )

আউটপুট:







পূর্ববর্তী স্ক্রিপ্টটি কার্যকর করার পরে নিম্নলিখিত আউটপুটটি উপস্থিত হয়:



  p1



উপরে যান





ইনপুট ডেটা সহ একটি কমান্ড চালান

'-c' বিকল্পের সাথে 'wc' কমান্ডটি এই কমান্ডের সাথে প্রদত্ত স্ট্রিং মানের মোট অক্ষর গণনা করতে ব্যবহৃত হয়। নিম্নলিখিত স্ক্রিপ্ট সহ একটি পাইথন ফাইল তৈরি করুন যা 'wc –c' কমান্ডগুলি চালানোর জন্য Popen() ফাংশন সহ একটি সাবপ্রসেস তৈরি করে। স্ক্রিপ্ট চালানোর পর টার্মিনাল থেকে স্ট্রিং ভ্যালু নেওয়া হয় এবং ইনপুট স্ট্রিংয়ের মোট অক্ষর আউটপুটে প্রিন্ট করা হয়।

# মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

# সাবপ্রসেসের জন্য একটি কমান্ড সংজ্ঞায়িত করুন এবং

# Popen() ফাংশন ব্যবহার করে ওপেন প্রক্রিয়া

আউটপুট = সাবপ্রসেস . পোপেন ( [ 'ডব্লিউসি' , '-গ' ] , stdout = সাবপ্রসেস . পাইপ )

# প্রক্রিয়াটির সাথে যোগাযোগ করে আউটপুট এবং ত্রুটি পুনরুদ্ধার করুন

stdout , stderr = আউটপুট যোগাযোগ ( )

# আউটপুট প্রিন্ট করুন

ছাপা ( stdout ডিকোড ( ) )

আউটপুট:



নিম্নলিখিত আউটপুট 'পাইথন সাবপ্রসেস উদাহরণ' ইনপুট মানের জন্য প্রদর্শিত হবে:

উপরে যান

একটি পাইথন স্ক্রিপ্ট চালান

নিম্নলিখিত স্ক্রিপ্ট সহ 'sum.py' নামে একটি পাইথন ফাইল তৈরি করুন যা দুটি সংখ্যার যোগফল গণনা করে এবং এই সংখ্যাগুলি কমান্ড-লাইন আর্গুমেন্ট হিসাবে দেওয়া হয়:

sum.py

# প্রয়োজনীয় মডিউল আমদানি করুন

আমদানি sys

# মোট আর্গুমেন্ট গণনা করুন

n = কেবল ( sys . argv )

# প্রথম দুটি আর্গুমেন্ট মান যোগ করুন

যোগফল = int ( sys . argv [ 1 ] ) + int ( sys . argv [ 2 ] )

# সংযোজন ফলাফল প্রিন্ট করুন

ছাপা ( 'যোগফল ' + sys . argv [ 1 ] + ' এবং ' + sys . argv [ 2 ] + 'হয়' , যোগফল )

একটি পাইথন তৈরি করুন ফাইল সঙ্গে নিম্নলিখিত স্ক্রিপ্ট যা একটি পাইথন চালাবে ফাইল নাম যোগফল . py সঙ্গে দুটি যুক্তি তৈরি করে একটি সাবপ্রসেস .

# মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

# সাবপ্রসেসে পাইথন স্ক্রিপ্ট চালান এবং

# Popen() ফাংশন ব্যবহার করে প্রক্রিয়াটি খুলুন

আউটপুট = সাবপ্রসেস . পোপেন ( [ 'পাইথন3' , 'sum.py' , '25' , '55' ] , stdout = সাবপ্রসেস . পাইপ ) # প্রক্রিয়াটির সাথে যোগাযোগ করে আউটপুট এবং ত্রুটি পুনরুদ্ধার করুন

stdout , stderr = আউটপুট যোগাযোগ ( )

# আউটপুট প্রিন্ট করুন

ছাপা ( stdout ডিকোড ( ) )

আউটপুট:

পূর্ববর্তী স্ক্রিপ্টটি কার্যকর করার পরে নিম্নলিখিত আউটপুটটি উপস্থিত হয়:

উপরে যান

`

সাবপ্রসেস ত্রুটি পরিচালনা করুন

নিম্নলিখিত স্ক্রিপ্ট সহ একটি পাইথন ফাইল তৈরি করুন যা 'ট্রাই-ব্যতীত' ব্লক ব্যবহার করে সাবপ্রসেসের ত্রুটিগুলি পরিচালনা করে। ব্যবহারকারীর কাছ থেকে একটি কমান্ড নেওয়া হয় এবং এটি সাবপ্রসেস দ্বারা কার্যকর করা হয়। ব্যবহারকারীর কাছ থেকে কোনো অবৈধ কমান্ড নেওয়া হলে ত্রুটি বার্তা প্রদর্শিত হয়।

# মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

আমদানি sys

# ব্যবহারকারীর কাছ থেকে কমান্ড নিন

আদেশ = ইনপুট ( 'একটি বৈধ কমান্ড লিখুন:' )

চেষ্টা করুন :

# Popen() ফাংশন ব্যবহার করে ওপেন প্রক্রিয়া

আউটপুট = সাবপ্রসেস . পোপেন ( [ আদেশ ] , stdout = সাবপ্রসেস . পাইপ )

# প্রক্রিয়াটির সাথে যোগাযোগ করে আউটপুট এবং ত্রুটি পুনরুদ্ধার করুন

stdout , stderr = আউটপুট যোগাযোগ ( )

# আউটপুট প্রিন্ট করুন

ছাপা ( stdout ডিকোড ( ) )

ছাড়া :

ছাপা ( 'ত্রুটি:' , sys . exc_info ( ) )

আউটপুট:

নিম্নলিখিত আউটপুট প্রদর্শিত হবে যদি 'pwd' কমান্ডটি ইনপুট হিসাবে নেওয়া হয় যা একটি বৈধ কমান্ড:

  p4-1

নিম্নলিখিত আউটপুট প্রদর্শিত হবে যদি 'usr' কমান্ডটি একটি বৈধ কমান্ড হিসাবে ইনপুট হিসাবে নেওয়া হয়:

  p4-2

উপরে যান

সাবপ্রসেসের কোডটি ফেরত দিন

নিম্নলিখিত স্ক্রিপ্ট সহ একটি পাইথন ফাইল তৈরি করুন যা বর্তমান অবস্থান থেকে সমস্ত পাইথন ফাইলের তালিকা পেতে সাবপ্রসেসের মাধ্যমে একটি 'ls' কমান্ড কার্যকর করে। স্ক্রিপ্টটি সাবপ্রসেস সম্পূর্ণ করার জন্য অপেক্ষা করে এবং রিটার্ন কোড প্রিন্ট করে।

# মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

আমদানি sys

# কমান্ড সেট করুন

আদেশ = [ 'লস' , '-এল' , '*.py' ]

চেষ্টা করুন :

# Popen() ফাংশন ব্যবহার করে ওপেন প্রক্রিয়া

আউটপুট = সাবপ্রসেস . পোপেন ( আদেশ , stdout = সাবপ্রসেস . পাইপ ,

stderr = সাবপ্রসেস . পাইপ , পাঠ্য = সত্য )

# প্রক্রিয়াটি সম্পূর্ণ করার জন্য অপেক্ষা করুন

retCode = আউটপুট অপেক্ষা করুন ( )

# রিটার্ন কোড প্রিন্ট করুন

ছাপা ( 'রিটার্ন কোড:' , retCode )

ছাড়া :

# ভুলের জন্য ভুল বার্তা প্রিন্ট করুন

ছাপা ( 'ত্রুটি:' , sys . exc_info ( ) )

আউটপুট:

পূর্ববর্তী স্ক্রিপ্ট চালানোর পরে একটি অনুরূপ আউটপুট প্রদর্শিত হয়:

উপরে যান

সাবপ্রসেসের আউটপুটকে ফাইলে রিডাইরেক্ট করুন

নিম্নলিখিত স্ক্রিপ্ট সহ একটি পাইথন ফাইল তৈরি করুন যা একটি পাঠ্য ফাইলে সাবপ্রসেসের আউটপুট লেখে। সাবপ্রসেস দ্বারা যে কমান্ডটি কার্যকর করা হয় তা ব্যবহারকারীর কাছ থেকে নেওয়া হয়।

#মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

# ফাইলের নাম সংজ্ঞায়িত করুন

ফাইলের নাম = 'outfile.txt'

# একটি পিং কমান্ড নিন

cmd = ইনপুট ( 'একটি পিং কমান্ড লিখুন:' )

# স্থানের উপর ভিত্তি করে নেওয়া ইনপুটটি বিভক্ত করুন

args = cmd . বিভক্ত ( )

# ফাইলে কমান্ড আউটপুট লিখুন

সঙ্গে খোলা ( ফাইলের নাম , 'ভিতরে' ) হিসাবে আউটডেটা:

প্রক্রিয়া = সাবপ্রসেস . পোপেন ( args , stdout = আউটডেটা )

# প্রক্রিয়াটি সম্পূর্ণ করার জন্য অপেক্ষা করুন

return_code = প্রক্রিয়া অপেক্ষা করুন ( )

আউটপুট:

নিম্নলিখিত আউটপুট অনুযায়ী, “ping -c 3 www.google.com ' কমান্ডটি ব্যবহারকারীর কাছ থেকে নেওয়া হয় এবং 'বিড়াল' কমান্ডটি সাবপ্রসেস দ্বারা লেখা ফাইলের বিষয়বস্তু প্রদর্শন করতে ব্যবহৃত হয়:

উপরে যান

Subprocess.Popen ব্যবহার করে মাল্টিপ্রসেসিং

নিম্নলিখিত স্ক্রিপ্ট সহ একটি পাইথন ফাইল তৈরি করুন যেখানে সাবপ্রসেস ব্যবহার করে মাল্টিপ্রসেসিংয়ের ব্যবহার দেখানো হয়েছে। এখানে display_msg() নামের একটি ফাংশনকে মাল্টিপ্রসেসিং ব্যবহার করে একাধিকবার কল করা হয়।

# প্রয়োজনীয় মডিউল আমদানি করুন

আমদানি মাল্টিপ্রসেসিং

আমদানি সাবপ্রসেস

# ফাংশনটি সংজ্ঞায়িত করুন যা মাল্টিপ্রসেসিং দ্বারা কল করা হবে

ডিফ প্রদর্শন_বার্তা ( n ) :

# ফরম্যাট() ফাংশন দিয়ে কমান্ডটি সংজ্ঞায়িত করুন

cmd = 'ইকো 'পাইথন প্রোগ্রামিং'' . বিন্যাস ( n )

# Popen() ফাংশন ব্যবহার করে ওপেন প্রক্রিয়া

প্রক্রিয়া = সাবপ্রসেস . পোপেন ( cmd , শেল = সত্য , stdout = সাবপ্রসেস . পাইপ )

# প্রক্রিয়াটির সাথে যোগাযোগ করে আউটপুট এবং ত্রুটি পুনরুদ্ধার করুন

stdout , ত্রুটি = প্রক্রিয়া যোগাযোগ ( )

# আউটপুট প্রিন্ট করুন

ছাপা ( stdout ডিকোড ( ) )

# মাল্টিপ্রসেসিং.পুল তৈরি করে ফাংশনটি 5 বার কল করুন

সঙ্গে মাল্টিপ্রসেসিং পুল ( মাল্টিপ্রসেসিং cpu_count ( ) ) হিসাবে mp:

# ফাংশনটি ম্যাপ করুন

mp মানচিত্র ( প্রদর্শন_বার্তা , পরিসীমা ( 1 , 5 ) )

আউটপুট:

পূর্ববর্তী স্ক্রিপ্টটি কার্যকর করার পরে নিম্নলিখিত আউটপুটটি উপস্থিত হয়:

উপরে যান

ইনপুট এবং আউটপুট স্ট্রীমগুলি পরিচালনা করুন

এই উদাহরণের পাইথন স্ক্রিপ্ট তৈরি করার আগে নিম্নলিখিত বিষয়বস্তু সহ “test.txt” নামে একটি টেক্সট ফাইল তৈরি করুন।

test.txt

পারল

অজগর

বাশ

php

নিম্নলিখিত স্ক্রিপ্ট সহ একটি পাইথন ফাইল তৈরি করুন যা একটি সাবপ্রসেস ব্যবহার করে “test.txt” ফাইলের বিষয়বস্তু পড়ার জন্য এবং অন্য একটি সাবপ্রসেস সেই টেক্সট ফাইলে একটি নির্দিষ্ট শব্দ অনুসন্ধান করতে। এখানে, 'test.txt ফাইলে' 'পাইথন' শব্দটি অনুসন্ধান করা হয়েছে যাতে এই শব্দটি রয়েছে।

# মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

#ইনপুট স্ট্রীমের জন্য একটি প্রক্রিয়া সংজ্ঞায়িত করুন

প্রক্রিয়াধীন = সাবপ্রসেস . পোপেন ( [ 'বিড়াল' , 'test.txt' ] , stdout = সাবপ্রসেস . পাইপ , পাঠ্য = ট্রু > #আউটপুট স্ট্রীমের জন্য একটি প্রক্রিয়া সংজ্ঞায়িত করুন

আউট_প্রসেস = সাবপ্রসেস . পোপেন (

[ 'আঁকড়ে ধরা' , 'অজগর' ] , stdin = প্রক্রিয়াধীন. stdout ,

stdout = সাবপ্রসেস . পাইপ , পাঠ্য = সত্য )

#ইনপুট এবং আউটপুট প্রক্রিয়ার আউটপুট সংরক্ষণ করুন

আউটপুট , _ = আউট_প্রসেস যোগাযোগ ( )

# আউটপুট প্রিন্ট করুন

ছাপা ( 'আউটপুট:' , আউটপুট )

আউটপুট:

স্ক্রিপ্ট চালানোর পরে নিম্নলিখিত আউটপুট প্রদর্শিত হয়:

উপরে যান

একটি টাইমার ব্যবহার করে সাবপ্রসেস নিয়ন্ত্রণ করুন

নিম্নলিখিত স্ক্রিপ্টের সাথে একটি পাইথন ফাইল তৈরি করুন যা একটি সাবপ্রসেস ব্যবহার করে একটি কমান্ড চালানোর জন্য একটি টাইমার ব্যবহার করে। এখানে, 'ট্রাই-ব্যতীত' ব্লকটি টাইমার শুরু করতে এবং 'অবশেষে' ব্লকটি টাইমার বাতিল করতে ব্যবহৃত হয়।

# সাবপ্রসেস মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

#টাইমার মডিউল আমদানি করুন

থেকে থ্রেডিং আমদানি টাইমার

# কমান্ডটি সংজ্ঞায়িত করুন

cmd = [ 'পিং' , 'www.example.com' ]

# প্রক্রিয়াটি খুলুন

পি = সাবপ্রসেস . পোপেন (

cmd , stdout = সাবপ্রসেস . পাইপ , stderr = সাবপ্রসেস . পাইপ )

#টাইমার সংজ্ঞায়িত করুন

টাইমার = টাইমার ( 2 , ল্যাম্বডা প্রক্রিয়া: প্রক্রিয়া। হত্যা ( ) , [ পি ] )

চেষ্টা করুন :

#টাইমার চালু করুন

টাইমার শুরু ( )

#আউটপুট পড়ুন

stdout , _ = পি. যোগাযোগ ( )

#প্রিন্ট আউটপুট

ছাপা ( stdout ডিকোড ( ) )

ছাড়া :

# ভুলের জন্য ভুল বার্তা প্রিন্ট করুন

ছাপা ( 'ত্রুটি:' , sys . exc_info ( ) )

অবশেষে :

#টাইমার বন্ধ করুন

টাইমার বাতিল ( )

আউটপুট:

স্ক্রিপ্ট চালানোর পরে নিম্নলিখিত আউটপুট প্রদর্শিত হয়:

উপরে যান

স্ট্রিমিং ইনপুট পড়ুন

একটি পাইথন ফাইল তৈরি করুন যা একটি 'while' লুপ ব্যবহার করে সাবপ্রসেস আউটপুটের বিষয়বস্তু পড়ে এবং একটি পরিবর্তনশীলে সামগ্রী সংরক্ষণ করে। এই পরিবর্তনশীল বিষয়বস্তু পরে মুদ্রিত হয়. এখানে, 'curl' কমান্ডটি এর জন্য সাবপ্রসেসে ব্যবহৃত হয় www.google.com URL

#মডিউল আমদানি করুন

আমদানি সাবপ্রসেস

# কমান্ড সংজ্ঞায়িত করুন

cmd = [ 'কুঁচকানো' , 'www.example.com' ]

পি = সাবপ্রসেস . পোপেন ( cmd , stdout = সাবপ্রসেস . পাইপ ,

stderr = সাবপ্রসেস . পাইপ , পাঠ্য = সত্য >

# আউটপুট ভেরিয়েবল শুরু করুন

আউটপুট = ''

যখন সত্য :

# লাইন দ্বারা প্রক্রিয়া আউটপুট লাইন পড়ুন

ln = পি. stdout . রিডলাইন ( )

# সাবপ্রসেস শেষ হলে লুপ থেকে বন্ধ করুন

যদি না ln:

বিরতি

আউটপুট = আউটপুট + ln

# লাইনটি প্রিন্ট করুন

ছাপা ( আউটপুট )

# প্রক্রিয়াটি শেষ করে রিটার্ন কোড পান

return_code = পি. অপেক্ষা করুন ( )

# রিটার্ন কোড প্রিন্ট করুন

ছাপা ( 'রিটার্ন কোড:' , return_code )

আউটপুট:

তিনটি আউটপুটের শেষ অংশ নিচের ছবিতে দেখানো হয়েছে। সাবপ্রসেস শেষ করার পর রিটার্ন কোড হল 0:

উপরে যান

উপসংহার

Python subprocess.Popen() এর বিভিন্ন ব্যবহার এই টিউটোরিয়ালে একাধিক Python স্ক্রিপ্ট ব্যবহার করে দেখানো হয়েছে যা পাইথন ব্যবহারকারীদের এই ফাংশনের মৌলিক ব্যবহার জানতে সাহায্য করবে।