J'ai joué avec le module subprocess
pour envoyer itérativement chaque ligne d'un fichier d'entrée à un processus créé par la commande suivante.Transmission de données à distance ligne par ligne en Python
ssh -t -A $host 'remote_command'
Le remote_command
attend une ligne dans son STDIN, exécute une partie sur la ligne et itère le cycle jusqu'à STDIN ferme ou atteint EOF.
Pour ce faire, ce que je faisais était:
process = subprocess.Popen("ssh -t -A $host 'remote_command'",
shell=True,
stdin=subprocess.PIPE)
for line in file('/tmp/foo'):
process.stdin.write(line)
process.stdin.flush()
process.stdin.close()
Mais ce que j'ai découvert que la méthode ci-dessus n'est pas assez robuste, car il est souvent que remote_command
se termine prématurément sans traitement le contenu entier (bien que parfois le même code réussisse sans problème).
La situation est la même quand j'emploie une autre, quoique très simiar approche:
process = subprocess.Popen("ssh -t -A $host 'remote_command'",
shell=True,
stdin=file('/tmp/foo'))
La question est: Comment puis-je faire en sorte que chaque ligne dans un fichier d'entrée être envoyés, reçus, et traité jusqu'à la fin par la machine distante en Python?
Merci encore pour l'idée que je n'ai pas vue ailleurs. J'essaierai 'nohup' et je reviendrai vers vous. – OTZ
@OTZ Voir la mise à jour de la réponse. Cela pourrait aider à expliquer ce qu'est 'remote_command', donc je peux essayer de reproduire le problème. – Aya