web-dev-qa-db-fra.com

Obtention d'une erreur - AttributeError: l'objet 'module' n'a pas d'attribut 'run' lors de l'exécution de subprocess.run (["ls", "-l"])

Je suis sous AIX 6.1 et j'utilise Python 2.7. Je veux exécuter la ligne suivante mais j'obtiens une erreur.

subprocess.run(["ls", "-l"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'run'
21
nisarga lolage

La fonction subprocess.run() n'existe que dans Python 3.5 et plus récent).

Il est cependant assez facile de rétroporter:

def run(*popenargs, input=None, check=False, **kwargs):
    if input is not None:
        if 'stdin' in kwargs:
            raise ValueError('stdin and input arguments may not both be used.')
        kwargs['stdin'] = subprocess.PIPE

    process = subprocess.Popen(*popenargs, **kwargs)
    try:
        stdout, stderr = process.communicate(input)
    except:
        process.kill()
        process.wait()
        raise
    retcode = process.poll()
    if check and retcode:
        raise subprocess.CalledProcessError(
            retcode, process.args, output=stdout, stderr=stderr)
    return retcode, stdout, stderr

Il n'y a pas de prise en charge des délais d'expiration et aucune classe personnalisée pour les informations de processus terminées, donc je ne renvoie que les informations retcode, stdout et stderr. Sinon, il fait la même chose que l'original.

31
Martijn Pieters