উত্তর:
আপনি চেক আউট যদি পাইথন ডক্সের subprocess অধ্যায় , আপনি নোটিস করবেন কিভাবে প্রতিস্থাপন করতে একটি উদাহরণ আছে os.system()সঙ্গে subprocess.Popen():
sts = os.system("mycmd" + " myarg")
... একই জিনিস ...
sts = Popen("mycmd" + " myarg", shell=True).wait()
"উন্নত" কোডটি আরও জটিল দেখায়, তবে এটি আরও ভাল কারণ আপনি একবার জানেন subprocess.Popen(), আপনার আর কিছু লাগবে না। subprocess.Popen()অন্যান্য os.system()তিনটি পাইথন মডিউল জুড়ে ছড়িয়ে ছিটিয়ে থাকা কয়েকটি অন্যান্য সরঞ্জাম ( কেবলমাত্র একটির মধ্যে একটি) প্রতিস্থাপন করে ।
এটি যদি সহায়তা করে তবে subprocess.Popen()খুব নমনীয় হিসাবে ভাবুন os.system()।
shell=True। এই বিকল্পটি থাকা এর অন্যতম সুবিধা subprocess.Popen()এবং এর সহায়ক কার্যকারিতা।
os.systemএবং subprocess.call/popen/runশেষ পর্যন্ত কমান্ডের জন্য ব্লক / অপেক্ষার আছে: stackoverflow.com/a/14059648/4752883
os.systemইউনিক্স systemকমান্ডের সমতুল্য , যখন একটি সহজ এবং নিয়ন্ত্রণযোগ্য ইন্টারফেসের সাহায্যে কমান্ড subprocessদ্বারা সরবরাহ করা অনেকগুলি সুবিধা সরবরাহ করতে সহায়ক সহায়ক মডিউল তৈরি করা হয়েছিল Popen। এগুলি ইউনিক্স পপেন কমান্ডের অনুরূপ নকশা করা হয়েছিল ।
system()ডেকে কমান্ডে সুনির্দিষ্ট একটি কমান্ড কার্যকর করে এবং কমান্ডটি শেষ/bin/sh -c commandহওয়ার পরে ফিরে আসে
যেখানে:
popen()ফাংশন একটি নল তৈরি, forking, এবং শেল আবাহন করার মাধ্যমে একটি প্রক্রিয়া প্রর্দশিত হবে।
আপনি যদি কোনটি ব্যবহার করবেন তা ভাবছেন, তবে subprocessঅবশ্যই কার্যকরভাবে ব্যবহার করুন কারণ কার্যকর করার জন্য সমস্ত সুযোগসুবিধা রয়েছে, পাশাপাশি প্রক্রিয়াটির উপরে অতিরিক্ত নিয়ন্ত্রণ রয়েছে।
Subprocess popen2 উপর ভিত্তি করে তৈরি, এবং যেমন সুবিধার একটি নম্বর আছে - একটি সম্পূর্ণ তালিকা আছে PEP এখানে , কিন্তু কিছু হল:
যখন Windows এ পাইথন (cpython) চলমান <built-in function system> os.system পর্দা অধীনে চালানো হবে _wsystem যখন আপনি একটি অ Windows OS ব্যবহার করছেন, এটা ব্যবহার করব সিস্টেম ।
বিপরীতভাবে, Popen ব্যবহার করা উচিত CreateProcess জানালা এবং এর _posixsubprocess.fork_exec মধ্যে posix ভিত্তিক অপারেটিং সিস্টেম।
এটি বলেছিল, ওএস.সিস্টেম ডক্স থেকে একটি গুরুত্বপূর্ণ পরামর্শ এসেছে , যা বলে:
সাবপ্রসেস মডিউলটি নতুন প্রক্রিয়া তৈরির এবং তাদের ফলাফল পুনরুদ্ধারের জন্য আরও শক্তিশালী সুবিধা সরবরাহ করে; এই ফাংশনটি ব্যবহার করার জন্য সেই মডিউলটি ব্যবহার করা ভাল। কিছু সহায়ক রেসিপিগুলির জন্য সাবপ্রসেস ডকুমেন্টেশনের সাবপ্রসেস মডিউল বিভাগের সাথে পুরানো ফাংশনগুলি প্রতিস্থাপন দেখুন।
sts = p.wait()শেষ লাইনের পরিবর্তে ব্যবহার করতে পারেন ।