2012-06-15 3 views
5

Ich möchte eine ausführbare Datei aus einem Rubin Rake-Skript, sagen foo.exeeinen Prozess in rubin Laichen, stdout Erfassung, stderr, existieren immer Status

ich die STDOUT und STDERR Ausgaben von foo.exe geschrieben werden direkt an die ausgeführt werden soll Konsole Ich führe die Rake-Aufgabe von.

Wenn der Prozess abgeschlossen ist, möchte ich den Exit-Code in eine Variable erfassen. Wie erreiche ich das?

Ich habe mit backticks spielen, process.spawn, system aber ich kann nicht alle das Verhalten bekommen ich will, nur Teile

Update: Ich bin auf Windows, in einem Standard-Eingabeaufforderung nicht cygwin

+0

Welcher Teil davon wird nicht von 'Kernel # System' abgedeckt? –

+0

Ich weiß, dass 'Net-SSH' pure ruby ​​lib, das mit openSSL funktioniert, eine solche Funktionalität hat -' exec' Methode von 'channel' gibt das Array von' [stdout, stderr, exit_code, exit_signal] 'zurück. Vielleicht kannst du es irgendwie benutzen ... – Ribtoks

+0

Vielleicht solltest du deine Probleme mit jedem dieser Befehle auflisten? –

Antwort

8

system bekommt das STDOUT Verhalten Sie wollen . Es gibt auch true für einen Null-Exit-Code zurück, der nützlich sein kann.

$? mit Informationen über den letzten system Anruf bevölkert, so dass Sie, dass für den Exit-Status überprüfen:

system 'foo.exe' 
$?.exitstatus 

ich eine Kombination dieser Dinge in Runner.execute_command für ein Beispiel verwendet haben.

+0

stellte sich heraus, dass ich STDERR nicht brauchte, also kann ich nicht überprüfen, dass dieses _does_ es handhabt, aber es funktioniert für meine Bedürfnisse –

2

Backticks erhalten stdout in resultierenden String

erfasst

foo.exe Sie Fenster laufen schon sagt - haben Sie so etwas wie cygwin installiert haben? Wenn Sie Ihr Skript innerhalb Unixy Shell ausführen können Sie dies tun:

result = `foo.exe 2>&1` 
status = $?.exitstatus 

schnell googeln sagt dies auch in nativen Fenstern arbeiten sollte Shell aber ich diese assupmtion nicht testen können

+0

+1 für '2> & 1', hinterhältig! –

Verwandte Themen