ЯКЩО він інтенсивно використовується в коді, який ви хочете запустити, але цей код не повинен підтримуватися довгостроково (або вам потрібне швидке виправлення, незалежно від потенційних головних болів у технічному обслуговуванні в майбутньому), тоді ви можете схилити удар (він же патч мавпи) це там, де імпортується підпроцес ...
Просто підніміть код з 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
Можливо, знадобляться незначні непосиди.
Майте на увазі, хоча на вас покладено обов’язок підтримувати такі брудні маленькі задні точки. Якщо помилки виявлені та виправлені в останньому python, ви а) повинні це помітити та б) оновити свою версію, якщо хочете бути захищеними. Крім того, перевизначення та визначення внутрішніх функцій - це найгірший кошмар наступного хлопця, особливо коли наступний хлопець - ВАС кілька років тому, і ви забули все про грубі хаки, які ви робили минулого разу! Підсумовуючи: дуже рідко це хороша ідея.
CalledProcessErrorколи процес повертає ненульовий код повернення.