Open3.popen3(cmd) do |stdin, stdout, stderr, wait_thread|
stdout.sync = true;
Thread.new do
stdout.each.with_index {|line, line_no| updateParameters(line) if line_no == $lineStartIndex}
end
stdin.puts "e #{$initialState}"
stdin.puts "e #{$nextState}"
stdin.puts "e #{$nextState}"
stdin.close
wait_thread.value
end
在下面的代码中,我想从stdout
每个标准输入之后读取数据。我的下一个输入取决于我在最后一个输出中得到什么。我想调用updateParameters()
函数来更新nextstate
将用于下一个输入的函数。但目前我只有在输入过程完成后才能得到输出。因此nextState
没有得到更新,我得到了错误的输出。
我知道目前所有数据都由 ruby 存储在缓冲区中,并且在接收到所有输入后返回整个输出。
但是有没有办法在每个输入命令之后在这里读取输出?