সাবপ্রসেস.পোপেন এবং ওএস.সিস্টেমের মধ্যে পার্থক্য


উত্তর:


99

আপনি চেক আউট যদি পাইথন ডক্সের 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()


আপনি sts = p.wait()শেষ লাইনের পরিবর্তে ব্যবহার করতে পারেন ।
সোভেন মারনাচ

1
@ জ্যাকব মার্বেল তাই ধরুন আমি অন্য পাইথন স্ক্রিপ্ট থেকে সেলেনিয়াম স্ক্র্যাপিং স্ক্রিপ্ট কল করছি, এর মধ্যে কোনটি আমাকে স্ক্র্যাপিং স্ক্রিপ্টটি সম্পূর্ণ করার অনুমতি দেবে এবং তারপরে এবং তারপরেই কেবল পরবর্তী লাইনের কোডটি কার্যকর করতে পারবে? হিসাবে হিসাবে, কার্যকর করা চালিয়ে যাওয়ার আগে আমার স্ক্র্যাপিংয়ের কাজ শেষ করা উচিত।
প্রখর মোহন শ্রীবাস্তব

আপনি যদি পারেন তবে আপনার এড়ানো উচিত বলে উল্লেখ করতে হয়ত স্ট্যাকওভারফ্লো.com/ প্রশ্নস / ৩১24৪৪70০/২ উল্লেখ করুন shell=True। এই বিকল্পটি থাকা এর অন্যতম সুবিধা subprocess.Popen()এবং এর সহায়ক কার্যকারিতা।
ট্রিপলি

@PrakharMohanSrivastava আপনি প্রবাহ অবরুদ্ধ এবং কমান্ড জন্য অপেক্ষা আউট তার কাজ চেক সম্পন্ন করতে চাইলে: stackoverflow.com/a/2837319/5252192
AmirHossein

@PrakharMohanSrivastava সাধারণভাবে উভয় os.systemএবং subprocess.call/popen/runশেষ পর্যন্ত কমান্ডের জন্য ব্লক / অপেক্ষার আছে: stackoverflow.com/a/14059648/4752883
alpha_989


23

os.systemইউনিক্স systemকমান্ডের সমতুল্য , যখন একটি সহজ এবং নিয়ন্ত্রণযোগ্য ইন্টারফেসের সাহায্যে কমান্ড subprocessদ্বারা সরবরাহ করা অনেকগুলি সুবিধা সরবরাহ করতে সহায়ক সহায়ক মডিউল তৈরি করা হয়েছিল Popen। এগুলি ইউনিক্স পপেন কমান্ডের অনুরূপ নকশা করা হয়েছিল ।

system()ডেকে কমান্ডে সুনির্দিষ্ট একটি কমান্ড কার্যকর করে এবং কমান্ডটি শেষ /bin/sh -c commandহওয়ার পরে ফিরে আসে

যেখানে:

popen()ফাংশন একটি নল তৈরি, forking, এবং শেল আবাহন করার মাধ্যমে একটি প্রক্রিয়া প্রর্দশিত হবে।

আপনি যদি কোনটি ব্যবহার করবেন তা ভাবছেন, তবে subprocessঅবশ্যই কার্যকরভাবে ব্যবহার করুন কারণ কার্যকর করার জন্য সমস্ত সুযোগসুবিধা রয়েছে, পাশাপাশি প্রক্রিয়াটির উপরে অতিরিক্ত নিয়ন্ত্রণ রয়েছে।


ঠিক আছে .. তবে আমি ওএস.সিস্টেম এবং উইন্ডোজ এনভিতে উভয়ই কার্যকর করতে পারি? আমি নবাগত এবং আরও গভীর খনন করা দরকার ..
অ্যারোভিট

হ্যাঁ, আপনি উইন্ডোজ এনভায়রনমেন্টে ওএস.সিস্টেম এবং সাবপ্রসেস উভয়ই ব্যবহার করতে পারেন। ইফবোট.অর্গ. (পাইথন স্ট্যান্ডার্ড লাইব্রেরি অনলাইন বই) থেকে প্রাথমিক টিউটোরিয়ালগুলি দেখুন
সেন্থিল কুমারান

যত্নবান - আপনি যদি পুরানো সিস্টেমে চলমান থাকেন তবে সাব-প্রসেস মডিউলটি উপলভ্য নয়।
স্টিভ হ্যানভ

21

Subprocess popen2 উপর ভিত্তি করে তৈরি, এবং যেমন সুবিধার একটি নম্বর আছে - একটি সম্পূর্ণ তালিকা আছে PEP এখানে , কিন্তু কিছু হল:

  • শেল মধ্যে পাইপ ব্যবহার
  • আরও ভাল নিউলাইন সমর্থন
  • ব্যতিক্রম ভাল পরিচালনা

2

যখন Windows এ পাইথন (cpython) চলমান <built-in function system> os.system পর্দা অধীনে চালানো হবে _wsystem যখন আপনি একটি অ Windows OS ব্যবহার করছেন, এটা ব্যবহার করব সিস্টেম

বিপরীতভাবে, Popen ব্যবহার করা উচিত CreateProcess জানালা এবং এর _posixsubprocess.fork_exec মধ্যে posix ভিত্তিক অপারেটিং সিস্টেম।

এটি বলেছিল, ওএস.সিস্টেম ডক্স থেকে একটি গুরুত্বপূর্ণ পরামর্শ এসেছে , যা বলে:

সাবপ্রসেস মডিউলটি নতুন প্রক্রিয়া তৈরির এবং তাদের ফলাফল পুনরুদ্ধারের জন্য আরও শক্তিশালী সুবিধা সরবরাহ করে; এই ফাংশনটি ব্যবহার করার জন্য সেই মডিউলটি ব্যবহার করা ভাল। কিছু সহায়ক রেসিপিগুলির জন্য সাবপ্রসেস ডকুমেন্টেশনের সাবপ্রসেস মডিউল বিভাগের সাথে পুরানো ফাংশনগুলি প্রতিস্থাপন দেখুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.