2010-09-16 8 views
2

Je suis en cours d'exécution d'un processus SSH comme ceci:entrée standard personnalisé pour python sous-processus

sshproc = subprocess.Popen([command], shell=True) 
exit = os.waitpid(sshproc.pid, 0)[1] 

Cela fonctionne et ouvre une borne interactive. Basé sur la documentation pour subprocess, sshproc utilise le script sys.stdin.

La question est: comment puis-je imprimer sur stderr ou sur un fichier quelle entrée est reçue par ce processus fils? Je crée une API de journalisation et je ne peux pas enregistrer les commandes exécutées sur cette session SSH.

Je n'ai pas besoin de la réponse, juste un coup de pouce dans la bonne direction.

Merci à tous!

EDIT: Il est important que je commence le processus comme indiqué ci-dessus afin que je puisse avoir une session SSH interactive avec mon utilisateur. Par exemple. Je ne peux pas utiliser communicate() autant que je sache.

Répondre

7
sshproc = subprocess.Popen([command], 
         shell=True, 
         stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE, 
         ) 

stdout_value, stderr_value = sshproc.communicate('through stdin to stdout') 
print repr(stdout_value) 
print repr(stderr_value) 

Ah puisque vous avez dit coup de coude dans la bonne direction, je pensais que je devrais vous indiquer les bonnes readups:

-

+0

Merci pour la suggestion, mais lors de l'utilisation de «communiquer» mes utilisateurs perdent la possibilité d'utiliser le SSH terminal interactif. – sholsapp