Paramiko und exec_command - töten remote-Prozess?

Ich bin mit Paramiko zu tail -f eine Datei auf einem remote-server.

Zuvor waren wir laufen über ssh -t, aber das erwies sich als unzuverlässig, und die -t verursacht Probleme mit unserer remote-scheduling-system.

Meine Frage ist, wie man tötet Schwanz, wenn das Skript fängt ein SIGINT?

Mein Skript (basierend auf Lang laufende ssh-Kommandos in python-paramiko-Modul (und wie Sie zu beenden))

#!/usr/bin/env python2
import paramiko
import select

client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('someserver', username='victorhooi', password='blahblah')
transport = client.get_transport()
channel = transport.open_session()

channel.exec_command("tail -f /home/victorhooi/macbeth.txt")
while True:
    try:
        rl, wl, xl = select.select([channel],[],[],0.0)
        if len(rl) > 0:
            # Must be stdout
            print channel.recv(1024)
    except KeyboardInterrupt:
        print("Caught control-C")
        client.close()
        channel.close()
        exit(0)

Das Skript fängt meine Strg-C erfolgreich, und enden. Allerdings, es lässt die tail -f Prozess läuft auf dem remote-system.

Weder client.close () - noch-Kanal.close () - scheinen Sie, es zu beenden.

Welchen Befehl kann ich das Problem in den except-block um es zu töten?

Remote-server mit Solaris 10.

InformationsquelleAutor victorhooi | 2011-10-12

Schreibe einen Kommentar