Python Exécuter un démon sous-processus & lire stdout

J'ai besoin d'exécuter un programme et de recueillir sa sortie sur stdout. Ce programme (socat) doit s'exécuter en arrière-plan pendant la durée du script python. Socat se trouve dans dameon mode une fois qu'il est exécuté, mais d'abord il affiche des lignes à la sortie standard stdout que j'ai besoin pour le reste de mon script.

Commande: socat -d -d PTY: PTY:

De sortie:

2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/1
2011/03/23 21:12:35 socat[7476] N PTY is /dev/pts/2
2011/03/23 21:12:35 socat[7476] N starting data transfer loop with FDs [3,3] and [5,5]

...

En gros, je veux courir qu'au début de mon programme et de le laisser tourner jusqu'à la fin du script, mais j'ai besoin de lire les deux /dev/pts/X les noms en python.

Quelqu'un peut me dire comment faire cela?

Je suis venu avec ce qui vient de se bloque, j'imagine, parce que c'est bloquant pour la fin du processus enfant.

#!/usr/bin/python
from subprocess import Popen, PIPE, STDOUT

cmd = 'socat -d -d PTY: PTY: &'

p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
output = p.stdout.read()

# Process the output 
print(output)

Merci pour toute aide

EDIT: il Semble qu'il peut écrire sur la sortie stderr, mais le scénario reste tout hanges avec et sans le & même la lecture de stderr.

Cela fonctionne sans le &?
Nan 🙁 Malheureusement ce n'est pas, il se bloque.
Avez-vous essayé d'ajouter dans une instruction print pour vérifier que c'est le blocage suite à votre appel à Popen et pas de blocage sur la read() appel?
Ne socat produire beaucoup de sortie, ou juste quelques lignes?

OriginalL'auteur Jason | 2011-03-23