मैं अजगर में एक शेल स्क्रिप्ट को कॉल करने का प्रयास कर रहा हूं, लेकिन यह टूटी हुई पाइप त्रुटि की रिपोर्ट करता रहता है (परिणाम ठीक है, लेकिन मैं एसटीडीईआरआर में त्रुटि संदेश नहीं देखना चाहता)। मैं कारण केंद्रित है, और यह निम्नलिखित स्निपेट के रूप में reproduced किया जा सकता है:पायथन: subprocess.call टूटा हुआ पाइप
subprocess.call('cat /dev/zero | head -c 10 | base64', shell=True)
AAAAAAAAAAAAAA ==
बिल्ली: लिखने त्रुटि: टूटी पाइप
/dev/zero
, एक अनंत धारा है, लेकिन head -c 10
केवल 10 बाइट्स पढ़ता है और बाहर निकलता है, तो पीयर ने पाइप बंद कर दिया है, इसलिए बिल्ली को सिगिपिप मिलेगा। जब मैं खोल में कमांड चलाता हूं तो कोई टूटा हुआ पाइप त्रुटि संदेश नहीं होता है, लेकिन पाइथन इसे क्यों दिखाता है?
त्रुटि दूर चला जाता है जब आप को छोड़ [uuoc] https://en.wikipedia.org/wiki/:
त्रुटि संदेश
cat
से आपpreexec_fn
तर्क का उपयोग कर सकते subprocess.call करने से बचने के लिए Cat_% 28Unix% 29 # Useless_use_of_cat): 'subprocess.call ('head -c 10 dev/zero | base64', shell = True)' –@ लार्समैन: आप इसे उत्तर के रूप में –
@ChrisMorgan: वास्तव में, मैं दृढ़ता से आपका जवाब पसंद करता हूं। –