将popen3中的值存储在Ruby的标准输出中

将popen3中的值存储在Ruby的标准输出中,ruby,string,popen,Ruby,String,Popen,如何将以下Ruby代码中的字符串值存储在stdout中? stdin, stdout, stderr = Open3.popen3('grep something test.txt') 我可以这样显示值:stdout.gets。但是,尝试这样存储值:s=stdout.get只需将s设置为nil。尝试这样存储值:s=stdout在soutput=stdout.read中存储类似于“#”的内容似乎可以工作。Open3.capture3可能是您想要的;它提供来自STDOUT和STDERR的字符串,以

如何将以下Ruby代码中的字符串值存储在
stdout
中?

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

我可以这样显示值:
stdout.gets
。但是,尝试这样存储值:
s=stdout.get
只需将
s
设置为
nil
。尝试这样存储值:
s=stdout
s
output=stdout.read
中存储类似于
“#”
的内容似乎可以工作。

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

在执行了stout.get之后,您是否试图执行
s=stdout.get
?我不这么认为。我只想将stdout中的值存储在一个字符串中。接下来我会做一些类似于
s.chomp(“\n”)
的事情,这很奇怪。使用
stdout没有问题。gets
gets
返回当前行。但是在文件的末尾,
gets
返回
nil
。这就是OP得到
nil
的原因。这取决于数据的长度。