ऐसा लगता है कि खोल = एक श्रृंखला की पहली प्रक्रिया में सच का उपयोग कर किसी भी तरह नीचे की ओर कार्यों से stdout चला जाता है:शैल = सच क्यों मेरे उपप्रोसेसर खाते हैं। स्टॉपआउट खोलें?
p1 = Popen(['echo','hello'], stdout=PIPE)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs correctly ('hello\n', None)
पहली प्रक्रिया उपयोग खोल बनाना = सच उत्पादन किसी भी तरह मारता है ...
p1 = Popen(['echo','hello'], stdout=PIPE, shell=True)
p2 = Popen('cat', stdin=p1.stdout, stdout=PIPE)
p2.communicate()
# outputs incorrectly ('\n', None)
खोल = दूसरी प्रक्रिया पर सही कोई फर्क नहीं पड़ता। क्या यह अपेक्षित व्यवहार है?
धन्यवाद! वंशावली के लिए, यहां [डॉक्स] (http://docs.python.org/library/subprocess.html) है: यूनिक्स पर, खोल = सही के साथ: अगर तर्क एक अनुक्रम है, तो पहला आइटम कमांड स्ट्रिंग निर्दिष्ट करता है, और किसी भी अतिरिक्त आइटम को खोल के लिए अतिरिक्त तर्क के रूप में माना जाएगा। यही कहना है, पॉपन बराबर करता है: 'पॉपन (['/बिन/श ',' -सी ', तर्क [0], तर्क [1], ...]) –
बहुत खराब दस्तावेज, IMHO – Davide