2017-10-08 1 views
0

je dois y parvenir:Comment attraper la sortie en dehors du sous-processus sous-processus

def x(): 
subprocess.Popen(...) 

Je ne peux pas modifier x() mais je besoin d'atteindre (suppress) stderr/stdout de l'appel Popen à l'intérieur.

je besoin de quelque chose comme:

with suppress_subprocess: 
x() 

... ou quelque chose comme ça.

+0

https://stackoverflow.com/questions/10683184/piping-popen-stderr-and-stdout –

+0

Jetez un oeil à python décorateurs @vpas –

+0

S'il vous plaît donnez-moi plus d'aide, et s'il vous plaît noter que l'intérieur de la fonction x() ne peut pas être modifié! – vpas

Répondre

0

retour de votre x fonction de l'objet popen et puis juste l'accès de votre dossier de l'appelant comme ceci:

def x(): 
    return subprocess.Popen(...) 


p= x() 

print p.stdout 
print p.stderr 
print p.returncode 

etc ....

+0

Comme je l'ai dit: La fonction x() ne peut pas être modifiée, disons qu'il s'agit d'un code tiers. – vpas

0

Il n'y a aucun moyen direct et facile. Vous devrez déterminer le PID du sous-processus et jouer avec ses descripteurs de fichier UNIX, à partir d'un autre thread. Désordonné.

+0

Au moment où vous avez trouvé le PID, il est trop tard: vous courez avec sa (première) sortie. –

+0

D'accord. Ce n'est pas un bon moyen, mais c'est un moyen. –