WENN es in dem Code, den Sie ausführen möchten, häufig verwendet wird, dieser Code jedoch nicht langfristig gewartet werden muss (oder Sie eine schnelle Lösung benötigen, unabhängig von möglichen Wartungsproblemen in der Zukunft), können Sie sich ducken (auch bekannt als Affen-Patch). es überall dort, wo ein Unterprozess importiert wird ...
Heben Sie einfach den Code von 2.7 an und fügen Sie ihn so ein ...
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
Möglicherweise ist ein geringfügiges Zappeln erforderlich.
Denken Sie daran, dass es Ihre Pflicht ist, schmutzige kleine Backports wie diesen zu pflegen. Wenn Fehler in der neuesten Python entdeckt und behoben werden, müssen Sie a) dies beachten und b) Ihre Version aktualisieren, wenn Sie sicher bleiben möchten. Das Überschreiben und Definieren interner Funktionen selbst ist der schlimmste Albtraum des nächsten Mannes, besonders wenn der nächste Mann mehrere Jahre später DU bist und du alles über die Grody-Hacks vergessen hast, die du das letzte Mal gemacht hast! Zusammenfassend: Es ist sehr selten eine gute Idee.
CalledProcessErrorwenn der Prozess einen Rückkehrcode ungleich Null zurückgibt.