2011-12-21 47 views
1

如何從以下Ruby代碼中將字符串值存儲在stdout中?Ruby中popen3的stdout中的存儲值

stdin, stdout, stderr = Open3.popen3('grep something test.txt') 

我可以顯示這樣的值:stdout.gets。然而試圖存儲這樣的值:s = stdout.gets只是將s設置爲nil。嘗試存儲像這樣的值:s = stdouts中存儲類似"#<IO:0x1003abe10>"的內容。

+0

您是否嘗試執行'stout.gets'後執行'S = stdout.gets'? – cyfdecyf 2011-12-21 02:58:38

+0

我不這麼認爲。我只想將值存儲在stdout中的字符串中。接下來,我會做's.chomp(「\ n」)' – SundayMonday 2011-12-21 03:06:03

回答

1

output = stdout.read似乎工作。

+0

這很奇怪。我使用'stdout.gets'沒有問題。 – cyfdecyf 2011-12-21 03:21:36

+1

'gets'返回當前行。但在文件結尾處,'gets'返回'nil'。這就是爲什麼OP得到'無'。它只取決於數據的長度。 – Linuxios 2011-12-21 03:43:14

1

Open3.capture3可能是你想要的;它可以讓你從STDOUT和STDERR的字符串,並且該過程的狀態:

outstr, errstr, status = Open3.capture3('/bin/command-here', param, param2) 
logger.info 'output: ' + outstr + '; error: ' + errstr 
      + "; " return code: " + status.exitstatus.to_s