बहुत विशिष्ट प्रश्न (मुझे आशा है): निम्नलिखित तीन कोडों के बीच अंतर क्या हैं?पायथन subprocess Popen.communicate() Popen.stdout.read() के बराबर है?
(मैं इसे ही नहीं, समाप्त होना पहले बच्चे की प्रक्रिया के लिए इंतजार नहीं करता, द्वितीय और तृतीय लोगों करना, जबकि होने की उम्मीद है। लेकिन मुझे यकीन है इस केवल अंतर नहीं है करने की आवश्यकता है ...)
मैं भी स्वागत अन्य टिप्पणी/सुझाव (हालांकि मैं पहले से ही shell=True
खतरों और पार मंच सीमाओं)
नोट से अच्छी तरह परिचित है कि मैं पहले से ही Python subprocess interaction, why does my process work with Popen.communicate, but not Popen.stdout.read()? पढ़ सकते हैं और है कि मैं नहीं चाहता हूँ/बातचीत करने के लिए की जरूरत है कार्यक्रम के बाद के साथ।
भी ध्यान रखें कि मैं पहले से ही Alternatives to Python Popen.communicate() memory limitations? पढ़ा लेकिन यह है कि मैं वास्तव में यह नहीं मिला ...
अंत में, ध्यान दें कि मुझे पता है गतिरोध का खतरा है जब एक बफर एक उत्पादन से भर जाता है है कि कहीं न कहीं हूँ एक विधि का उपयोग कर, लेकिन, जबकि इंटरनेट पर स्पष्ट व्याख्या की तलाश में मैं खो गया ...
पहले कोड:
from subprocess import Popen, PIPE
def exe_f(command='ls -l', shell=True):
"""Function to execute a command and return stuff"""
process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)
stdout = process.stdout.read()
stderr = process.stderr.read()
return process, stderr, stdout
दूसरा कोड:
from subprocess import Popen, PIPE
from subprocess import communicate
def exe_f(command='ls -l', shell=True):
"""Function to execute a command and return stuff"""
process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)
(stdout, stderr) = process.communicate()
return process, stderr, stdout
तीसरा कोड:
from subprocess import Popen, PIPE
from subprocess import wait
def exe_f(command='ls -l', shell=True):
"""Function to execute a command and return stuff"""
process = Popen(command, shell=shell, stdout=PIPE, stderr=PIPE)
code = process.wait()
stdout = process.stdout.read()
stderr = process.stderr.read()
return process, stderr, stdout
धन्यवाद।