2012-06-15 16 views
5

chcę uruchomić plik wykonywalny ze skryptu Ruby natarcia, powiedzmy foo.exetarła proces w Ruby, przechwytywania stdout, stderr, zaczyna istnieć stan

Chcę, STDOUT i STDERR wyjścia z foo.exe być zapisywane bezpośrednio do konsola Zaczynam od zadania rake.

Po zakończeniu procesu chcę przechwycić kod zakończenia do zmiennej. Jak to osiągnąć?

Grałem z backticks, process.spawn, system ale nie mogę uzyskać wszystkie zachowania Chcę jedynie części

Aktualizacja: Jestem na Windows, w standardowym wierszu poleceń nie cygwin

+0

Która część tego nie jest objęta 'Kernel # system'? –

+0

Wiem, że czysta ruby ​​"Net-SSH", która działa z openSSL ma taką funkcjonalność - 'exec' metoda jego' channel' zwraca tablicę '[stdout, stderr, exit_code, exit_signal]'. Może możesz go jakoś wykorzystać ... – Ribtoks

+0

Może powinieneś wymienić swoje problemy z każdym z tych poleceń? –

Odpowiedz

8

system dostaje zachowanie STDOUT chcesz . Zwraca także true dla zerowego kodu wyjścia, który może być przydatny.

$? jest wypełniona informacjami o ostatniej system połączenia, dzięki czemu można sprawdzić, że dla statusu wyjścia:

system 'foo.exe' 
$?.exitstatus 

Użyłem kombinacji tych rzeczy w Runner.execute_command dla przykładu.

+0

okazało się, że nie potrzebowałem STDERR, więc nie mogę zweryfikować, że to się nie uda, ale działa na moje potrzeby –

2

backticks dostanie stdout schwytany w Powstały ciąg

foo.exe sugeruje używasz systemu Windows - masz coś podobnego Cygwin zainstalowany? jeśli uruchomić skrypt w ciągu unixy powłoce można to zrobić:

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

szybkie googling mówi ten powinien również pracować w rodzimych powłoce systemu Windows, ale nie mogę przetestować ten assupmtion

+0

+1 dla '2> i 1', podstępne! –

Powiązane problemy