web-dev-qa-db-fra.com

Python sous-processus readlines ()?

J'essaie donc de passer de os.popen à subprocess.popen comme recommandé par le guide de l'utilisateur. Le seul problème que j'ai, c'est que je n'arrive pas à trouver un moyen de faire fonctionner readlines ().

Alors je pouvais faire

list = os.popen('ls -l').readlines()

Mais je ne peux pas faire

list = subprocess.Popen(['ls','-l']).readlines()
15
joedborg

Avec subprocess.Popen, Utilisez communicate pour lire et écrire des données:

out, err = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE).communicate() 

Ensuite, vous pouvez toujours séparer la chaîne des processus 'stdout avec splitlines().

out = out.splitlines()
26
agf
ls = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
out = ls.stdout.readlines()

ou, si vous voulez lire ligne par ligne (peut-être que l'autre processus est plus intensif que ls):

for ln in ls.stdout:
    # whatever
32
Fred Foo

Faire un appel système qui renvoie la sortie stdout sous forme de chaîne :

lines = subprocess.check_output(['ls', '-l']).splitlines()
11
jfs

Une manière plus détaillée d'utiliser le sous-processus.

        # Set the command
        command = "ls -l"

        # Setup the module object
        proc = subprocess.Popen(command,
                            Shell=True,   
                            stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE,
                            stderr=subprocess.PIPE)

        # Communicate the command   
        stdout_value,stderr_value = proc.communicate()

        # Once you have a valid response, split the return output    
        if stdout_value:
            stdout_value = stdout_value.split()
3
thirumalaa srinivas
list = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE).communicate()[0].splitlines()

directement depuis la help(subprocess)

3
Kimvais