代码之家  ›  专栏  ›  技术社区  ›  Montana Harkin

如何在运行ruby system()调用时获取它的标准输出?

  •  9
  • Montana Harkin  · 技术社区  · 14 年前

    类似 Getting output of system() calls in Ruby ,我正在运行一个系统命令,但在这种情况下,我需要在命令运行时从中输出STDOUT。

    2 回复  |  直到 7 年前
        1
  •  13
  •   sepp2k    14 年前

    正如在链接的问题中一样,答案是再次不使用 system 完全是 系统 不支持此操作。

    但是这次的解决方案不是 backticks ,但是 IO.popen ,它返回一个IO对象,您可以在生成输入时使用该对象读取输入。

        2
  •  0
  •   Xuanyu    7 年前

    这是我的解决方案

    def io2stream(shell, &block)
      Open3.popen3(shell) do |_, stdout, stderr|
        while line = stdout.gets
          block.call(line)
        end
    
        while line = stderr.gets
          block.call(line)
        end
      end
    end
    
    io2stream("ls -la", &lambda { |str| puts str })