2012-06-15 40 views
5

我想從運行紅寶石耙腳本可執行文件,說foo.exe產卵紅寶石的過程,捕捉標準輸出,標準錯誤,獲得存在狀態

我想從foo.exeSTDOUTSTDERR輸出直接寫入控制檯我正在運行rake任務。

當進程完成後,我想將退出代碼捕獲到一個變量中。我如何實現這一目標?

我一直在玩backticksprocess.spawnsystem但我不能得到我想要的行爲,只有部分

更新:我在Windows上,在一個標準的命令提示符,而不是在cygwin

+0

「Kernel#system」未涵蓋哪部分內容? –

+0

我知道和openSSL一起工作的'Net-SSH'純ruby庫具有這樣的功能 - 'channel'的'exec'方法返回'[stdout,stderr,exit_code,exit_signal]'的數組。也許你可以以某種方式使用它... – Ribtoks

+0

也許你應該列出你的每個命令的問題? –

回答

8

system得到你想要的STDOUT行爲。它也返回true爲零退出代碼,這可能是有用的。

$?與有關最後system呼叫信息填充,因此您可以檢查的退出狀態:

system 'foo.exe' 
$?.exitstatus 

我用這些東西的組合,Runner.execute_command爲例。

+0

原來我沒有需要STDERR,所以我不能驗證這_does_處理它,但它適用於我的需要 –

2

反引號將得到stdout捕獲到生成的字符串

foo.exe建議你運行的是Windows - 你有沒有安裝像Cygwin的東西嗎?如果你unixy外殼的內部運行腳本,你可以這樣做:

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

快速谷歌搜索說,這也應該在本地Windows工作外殼,但我不能對此進行測試assupmtion

+0

對於'2>&1' +1,偷偷摸摸! –

相關問題