2011-01-04 9 views
3

Wie führe ich Piped Befehle in Paramiko? Ich tue dies: -Piped Befehle in paramiko

statement = 'grep thing file | grep thing2 | tail -1' 
last_msg = conn.execute(statement) 

i die Ausgabe von grep thing file nur bekommen.

Antwort

7

Weil grep nicht weiß, wie man | behandelt. Machen Sie sich bereit für einige böse Entkommen:

statement = """sh -c 'grep thing file | grep thing2 | tail -1'""" 

Dies schafft eine Schale auf der anderen Seite, und fordert sie auf den String grep thing file | grep thing2 | tail -1 zu interpretieren. Die einfachen Anführungszeichen sind notwendig, da sh -c nur ein einziges Argument akzeptiert.

Auf diese Weise erstellt eine Shell die Pipe für Sie und führt alle Befehle aus. Und Sie sollten besser sicher sein, dass der Dateiname file keine Leerzeichen enthält. Wenn dies der Fall ist, versuchen Sie "file".

+0

ehrfürchtige Antwort, es funktioniert !!! Wie füge ich nun Variablen in die Anweisung ein? Ich habe "" "+ Variable +" "", ich bekam einen unerreichten 'Fehler – Templar

+1

@Templar 'Anweisung =" "" ... grep% s Datei | grep% s ... "" "% (" Sache ", "thing2") 'Denken Sie daran, * Ihre Eingaben * wirklich * zu überprüfen, da Sie dies am anderen Ende ausführen können, wenn Sie eines der Argumente ändern können. – plundra

+0

... zum Beispiel, wenn jemand eine Datei erstellt, die 'xxx-Datei liest; rm -rf. ; '. Denken Sie daran, dass es nur zwei Zeichen gibt, die in einem Unix-Dateinamen unzulässig sind, sind die 0 Byte und '/'. –