2010-03-31 6 views
4

Je voudrais exécuter un programme via ssh et rediriger son entrée à partir d'un fichier. Le comportement du code ci-dessous:Comment envoyer EOF à stdin dans paramiko?

channel.exec_command('cat') 
with open('mumu', 'r') as f: 
    text = f.read() 
    nbytes = 0 
    while nbytes < len(text): 
     sent = channel.send(text[nbytes:]) 
     if sent == 0: 
      break 
     nbytes += sent 

devrait être équivalent à (en supposant l'authentification à clé publique):

ssh [email protected] cat < mumu 

Toutefois, l'application se bloque en attente pour plus d'entrée. Je pense que cela arrive parce que le flux stdin n'est jamais fermé. Comment je fais ça?

Répondre

5

Appel shutdown() (ou shutdown_write()) sur le canal.

+0

ce qui se passe à stdout et stderr alors? – Alexandru

+0

@Alexandru: J'ai eu la mauvaise fonction. –

4

Appelez la méthode: channel.shutdown_write().