【问题标题】:Ruby: puts printing stderr of the result of a commandRuby:放置命令结果的打印标准错误
【发布时间】:2015-08-14 00:19:05
【问题描述】:

我不清楚“puts”如何在 Ruby 中用于将其输出抛出到 stderr 的命令的输出。

看这段代码:

command="/usr/bin/java -version"
result=`#{command}`

puts result
puts "XX#{result}XX"

结果是:

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

XXXX

java -version 将其输出发送到 stderr(我知道为了防止这种情况,我应该在命令末尾使用 2>&1)

我的问题:变量“result”实际上是空的,但是第一个 puts 打印 stderr 输出,第二个 put 打印 stdout(它是空的)。为什么?怎么回事?

【问题讨论】:

  • 反引号仍然运行命令并打印其输出。 capture,即反引号的​​返回,是标准输出。

标签: ruby variables stderr puts


【解决方案1】:

实际上,puts 语句都没有打印任何内容。如果你这样做:

puts "YY#{result}YY"
puts "XX#{result}XX"

你会看到你得到了YYYYXXXX

您看到 Java 输出的原因是因为 Java 本身正在打印到 Ruby 未捕获的 stderr。

【讨论】:

    【解决方案2】:

    第一个 puts result 只打印换行符。输出来自以下行(通过命令本身,打印到 stderr)

    result=`#{command}`
    

    您可以通过删除所有 puts ... 行来确认。

    【讨论】:

    • 呃!我被自己愚弄了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多