代码之家  ›  专栏  ›  技术社区  ›  WPeN2Ic850EU

与正在运行的进程交互

  •  1
  • WPeN2Ic850EU  · 技术社区  · 8 年前

    让我们举个简单的例子:

    Process.run("ping", {"google.com"}) do |proc|
      proc.output.each_line { |line| puts line }
    end
    

    它运行一个进程,不断读取其输出并将输出打印到stdout。目前,当我按下一个键时,它会随着正在运行的进程的输出一起出现,但是我想进行某种键处理,所以我可以从键盘管理正在运行的进程:停止它,或者用修改过的参数重新启动它。怎么做?


    或者,为了缩小问题范围,如何使这个输出输入对彼此不阻塞?目前它只需要一步,然后等待它的对应物发生。

    Process.run("ping", {"google.com"}) do |proc|
      until proc.output.closed?
        puts proc.output.gets
        puts "Got key: #{STDIN.raw &.read_char}"
      end
    end
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Johannes Müller    8 年前