2012-09-30 5 views
6

Ich verwende tmux, um eine Serverkonsole auszuführen. Um zu überprüfen, ob die Konsole beantwortet, würde Ich mag send-keys verwenden, um einen Befehl auf der Konsole auszuführen:Wie bekomme ich das Ergebnis von send-keys in tmux?

tmux send-keys -t mysess:mywin "show info" Enter 

(Eigentlich bin ich zur Zeit die volle Konsole Ausgabe in eine Datei protokollieren und die letzte Zeile zu lesen, aber ich hoffe, dass eine bessere Lösung existiert.)

tmux pipe-pane -o -t mysess:mywin 'cat >> mysess-mywin.log' 
+0

Versuchen Sie, den Tag für das O Sie verwenden hinzuzufügen - das wird andere helfen, Ihre Frage und Antwort zu finden es. Das [tmux] -Tag hat nur 75 Follower. – Artemix

+0

Die Ausgabe von 'show info' wird nicht angezeigt, da sie in' mysess: mywin' erscheint, nicht in dem Fenster, in dem Sie den Befehl 'send-keys' ausgeführt haben. – chepner

Antwort

0

eine Option ist ein Skript mit send-Tasten aufrufen, die ‚Show Info‘ läuft und haben das Skript ‚send-Tasten‘ zurück die Ergebnisse an die tmux Sitzung Du bist eingeschaltet. Das funktioniert nur, wenn Sie zu Beginn in tmux sind.

4

Der Kontext, wie Sie die Ausgabe zugreifen, auswirken wird, ob diese Lösung besser ist oder nicht, aber das könnte funktionieren:

tmux send-keys -t <session:win.pane> '<command>' Enter 
tmux capture-pane -t <session:win.pane> 
tmux show-buffer 

Sie sollten mit dem -S spielen können, und -E Optionen von capture-pane sowie die Größe des Bereichs, um die Ausgabe genau zu erfassen. Wenn Sie so geneigt sind, können Sie auch show-panes und einen kleinen Regexp verwenden, um die Höhe des Bereichs zu erfassen, und dann einfach -S <height - 1> verwenden, um nur die letzte Zeile zu erfassen.

Es ist dann einfach diese aus einem anderen Programm wie so zu lesen (zB in Python):

print Popen(['tmux', 'show-buffer'], stdout=PIPE).communicate()[0]