2010-11-15 16 views
2

Cette question est en ce qui concerne:Python subprocess ou non

python, subprocess: reading output from subprocess

Si P est un sous-processus a commencé par une commande le long des lignes de

import subprocess 

P = subprocess.Popen ("command", stdout=subprocess.PIPE) 

on peut lire la sortie P produit par P.stdout.readline(). C'est une lecture bloquante cependant. Comment puis-je vérifier s'il y a une sortie prête pour la lecture (sans blocage)?

+0

double possible [Lecture non bloquante sur un flux en python.] (Http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python) – katrielalex

Répondre

0

Si vous utilisez * nix, vous pouvez utiliser le module select pour interroger le descripteur de fichier stdout

import subprocess 
import select 
poller = select.epoll() 

P = subprocess.Popen ("command", stdout=subprocess.PIPE) 
poller.register(P.stdout, select.EPOLLHUP) 

while True: 
    #block indefinitely: timeout = -1 
    #return immediately: timeout = 0 
    for fd, flags in poller.poll(timeout=0) 
     foo = P.stdout.readline() 
    #do something else before the next poll