Est-il un moyen de sondage un descripteur de fichier retourné de subprocess.Popen?

StackOverflow https://stackoverflow.com/questions/883152

  •  22-08-2019
  •  | 
  •  

Question

Dire que j'écris ceci:

from subprocessing import Popen, STDOUT, PIPE
p = Popen(["myproc"], stderr=STDOUT, stdout=PIPE)

Et si je fais

line = p.stdout.readline()

mon programme attend jusqu'à ce que le sous-processus émet la ligne suivante.

Y at-il magique que je peux faire pour p.stdout pour que je puisse lire la sortie si elle est là, mais juste continuer autrement? Je cherche quelque chose comme Queue.get_nowait()

Je sais que je peux créer un fil pour la lecture p.stdout, mais supposons que je ne peux pas créer de nouvelles discussions.

Était-ce utile?

La solution

Utilisez le module select dans la bibliothèque standard de Python, consultez http://docs.python.org/ bibliothèque / select.html. select.select([p.stdout.fileno()], [], [], 0) retourne immédiatement un tuple dont les éléments sont trois listes:. le premier va être vide s'il y a quelque chose à lire sur ce descripteur de fichier

Autres conseils

Utilisez p.stdout.read(1) ce lira caractère par caractère

Et voici un exemple complet:

import subprocess
import sys

process = subprocess.Popen(
    cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

while True:
    out = process.stdout.read(1)
    if out == '' and process.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top