Python - subprocess.Popen - ssh -t user@host "service --status-all"

Ich habe gelesen, ein paar Beispiele, aber keiner von Ihnen arbeiten für diese spezifische Aufgabe.

Python-code:

x = Popen(commands, stdout=PIPE, stderr=PIPE, shell=True)
print commands
stdout = x.stdout.read()
stderr = x.stderr.read()
print stdout, stderr
return stdout

Ausgabe:

[user@host]$ python helpers.py
['ssh', '-t', 'user@host', ' ', "'service --status-all'"]
 usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]

Warum bin ich immer diese Fehlermeldung?
Mit os.popen(...) es funktioniert, es führt zumindest ich kann Sie aber nicht abrufen, die Ausgabe der remote-Befehl über SSH-tunnel.

Die Ausgabe legt nahe, dass Sie nicht bestanden genügend/die richtigen Parameter für den Befehl.
Entfernen Sie die Leerzeichen-Element, und entfernen Sie die Anführungszeichen um den letzten parameter.
btw, sind Sie mit public-key-Authentifizierung? oder Passwort-Authentifizierung?
Erwägen Sie die Verwendung paramiko / fabric.
unrelated: verwenden Sie stdout, stderr = x.communicate() statt stdout = x.stdout.read(); stderr = x.stderr.read(). Letzteres kann zu einem deadlock führen, wenn commands erzeugt genug Leistung. Eine alternative ist die Verwendung von verschiedenen threads zu Lesen, stdout/stderr gleichzeitig oder verwenden select oder fnctl Module (Unix)

InformationsquelleAutor Torxed | 2013-01-18

Schreibe einen Kommentar