fragen stichworte

Holen Sie sich Unix 'top' Befehlsausgaben aus dem Expect-Skript

Alle,
BEARBEITEN
Ich möchte eine Unix-Anweisung im Expect-Skript ausführen und eine Ausgabe abrufen, ohne die Interaktionsanweisung einschließen zu müssen. Die Unix-Anweisung gibt den Größenwert für einen Prozess aus. Ich habe noch nicht in Expect programmiert. Dies ist mein Code:

#!/usr/bin/expect
 set some_host "some host"
 set Mycmd "top -l 1 -stats pid,rsize,command | grep Process_Name| awk '{print \$2};'"
 spawn telnet localhost $some_host
 expect "login:"
 send "myDevice\r"
 expect "Password:"
 send "$password\r"
 expect "\$"
 send "$Mycmd\r"   
 interact

Wenn ich die interaktive Anweisung nicht einbeziehe, erhalte ich keine Ausgabe. Wie bekomme ich das so, dass ich den richtigen Rsize-Wert als Ausgabe bekomme?

antworten

Warum nicht einfach die Ausgabe von ps verwenden?

$ ps -p <pid> -o rss | egrep '[0-9]'

Sie können dies remote über ssh tun:

$ ssh user@host ps -p <pid> -o rss | egrep '[0-9]'

Sie können jede dieser Methoden verwenden, jede hat leicht unterschiedliche Ergebnisse.

expect -re "*\\n"
expect
expect "%"

Sie sollten sich auch die Bedeutung von match_max ansehen, die steuert, wie viel gepasst wird.

Nachdem die Ergebnisse abgefangen wurden, sollten Sie die Ergebnisse sehen

puts "$expect_out(buffer)"

Siehe http://en.wikipedia.org/wiki/Expect für einige großartige Beispiele.