检测子进程何时需要 Ruby 中的输入
Detecting when a subprocess expects input in Ruby
我有一个控制台应用程序(命令响应类型),我想控制它的 IO,这样我就可以从文件中为它提供脚本,然后在脚本执行完成后手动继续执行。
我的脚本是这样的:
ARGF.readlines = commands
IO.popen('ConsoleApplication') { |io|
begin
puts io.gets
sleep 0.1
end while ????
}
据我观察,IO.popen 将 io 对象的输入连接到进程 IO,但应读取输出。如果通过某种方式自动显示输出,或者我可以检测到进程何时在何处等待输入????我是不是觉得这件事情可以算完了!
我的进一步解决方法结果:
Expect 不适用于寡妇,因为 windows 不支持伪终端 (PTY) 所以我不能使用 ruby_expect 之类的库 windows!
我尝试将 IO.select 与遇到 "bad file pointer" 的 IO.read_nonblock 结合使用。有人说non-blocking IO is not supported in windows as well
所以我自己用了一些特殊的字符串来同步读写序列,任务就完成了。
我有一个控制台应用程序(命令响应类型),我想控制它的 IO,这样我就可以从文件中为它提供脚本,然后在脚本执行完成后手动继续执行。
我的脚本是这样的:
ARGF.readlines = commands
IO.popen('ConsoleApplication') { |io|
begin
puts io.gets
sleep 0.1
end while ????
}
据我观察,IO.popen 将 io 对象的输入连接到进程 IO,但应读取输出。如果通过某种方式自动显示输出,或者我可以检测到进程何时在何处等待输入????我是不是觉得这件事情可以算完了!
我的进一步解决方法结果: Expect 不适用于寡妇,因为 windows 不支持伪终端 (PTY) 所以我不能使用 ruby_expect 之类的库 windows!
我尝试将 IO.select 与遇到 "bad file pointer" 的 IO.read_nonblock 结合使用。有人说non-blocking IO is not supported in windows as well
所以我自己用了一些特殊的字符串来同步读写序列,任务就完成了。