SI il est largement utilisé dans le code que vous voulez exécuter, mais ce code n'a pas à être maintenus à long terme (ou si vous avez besoin d'une solution rapide, indépendamment du potentiel de l'entretien des maux de tête dans le futur), alors vous pourriez duck punch (alias monkey patch) dans la mesure d'un processus secondaire est importé...
Il suffit de soulever le code de 2,7 et de l'insérer ainsi...
import subprocess
if "check_output" not in dir( subprocess ): # duck punch it in!
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
Mineur de gigoter peut être nécessaire.
Ne garder à l'esprit que le fardeau de la preuve est sur vous pour maintenir sale petit backports de ce genre. Si des bugs sont découverts et corrigés dans la dernière python alors vous un) ont à l'avis et b) de mettre à jour votre version si vous voulez rester en sécurité. Aussi, primordiale et la définition des fonctions internes de vous-même est le gars à côté est pire cauchemar, surtout quand le gars à côté est de plusieurs années sur toute la ligne et que vous avez oublié le grody hacks que vous avez fait la dernière fois! En résumé: c'est très rarement une bonne idée.