2011-12-21 20 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