【问题标题】:Store value in stdout from popen3 in Ruby将值存储在 Ruby 中 popen3 的标准输出中
【发布时间】:2011-12-21 02:46:53
【问题描述】:

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

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

我可以这样显示值:stdout.gets。但是尝试像这样存储值:s = stdout.gets 只是将s 设置为nil。尝试像这样存储值:s = stdouts 中存储类似 "#<IO:0x1003abe10>" 的内容。

【问题讨论】:

  • 您是否在执行stout.gets 后尝试执行s = stdout.gets
  • 我不这么认为。我只想将值存储在字符串中的标准输出中。接下来我会做类似s.chomp("\n")

标签: ruby string popen


【解决方案1】:

output = stdout.read 似乎有效。

【讨论】:

  • 这很奇怪。我使用stdout.gets 没有问题。
  • gets 返回当前行。但在文件末尾,gets 返回nil。这就是为什么 OP 得到nil。这仅取决于数据的长度。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2016-07-03
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    相关资源
    最近更新 更多