यदि यह उस कोड में बहुत अधिक उपयोग किया जाता है जिसे आप चलाना चाहते हैं, लेकिन उस कोड को लंबे समय तक बनाए रखने की आवश्यकता नहीं है (या आपको भविष्य में संभावित रखरखाव सिरदर्द के बावजूद एक त्वरित फिक्स की आवश्यकता है) तो आप पंच (उर्फ बंदर पैच) को डक कर सकते हैं यह जहां भी उप-आयात किया जाता है ...
बस 2.7 से कोड उठाएं और इसे इसी तरह डालें ...
import subprocess
if "check_output" not in dir( subprocess ):
def f(*popenargs, **kwargs):
if 'stdout' in kwargs:
raise ValueError('stdout argument not allowed, it will be overridden.')
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
output, unused_err = process.communicate()
retcode = process.poll()
if retcode:
cmd = kwargs.get("args")
if cmd is None:
cmd = popenargs[0]
raise subprocess.CalledProcessError(retcode, cmd)
return output
subprocess.check_output = f
मामूली विदाई की आवश्यकता हो सकती है।
हालांकि इस तरह गंदे छोटे backports बनाए रखने के लिए onus आप पर है ध्यान में रखें। यदि बग्स की खोज की गई है और नवीनतम अजगर में सुधार किया गया है, तो आपको a) यह ध्यान रखना होगा कि यदि आप सुरक्षित रहना चाहते हैं तो b) अपने संस्करण को अपडेट करें। इसके अलावा, आंतरिक कार्यों को ओवरराइड करना और परिभाषित करना अपने आप में अगले लड़के का सबसे बुरा सपना है, खासकर तब जब अगला लड़का आप लाइन से कई साल नीचे हो और आप पिछली बार किए गए घमासान हैक के बारे में सब भूल गए हों! संक्षेप में: यह बहुत कम ही एक अच्छा विचार है।
CalledProcessErrorतब नहीं बढ़ता है जब प्रक्रिया गैर-शून्य रिटर्न कोड देती है।