【问题标题】:Detecting when a subprocess expects input in Ruby检测子进程何时需要 Ruby 中的输入
【发布时间】:2015-06-09 19:44:54
【问题描述】:

我有一个控制台应用程序(命令响应类型),我想控制它的 IO,以便我可以从文件中输入一个脚本,然后在脚本执行完成后手动继续执行。

我的脚本是这样的:

ARGF.readlines = commands

IO.popen('ConsoleApplication') { |io|
    begin
        puts io.gets
        sleep 0.1
    end while ????
}

正如我所观察到的,IO.popen 将 io 对象的输入连接到进程 IO,但应该读取输出。如果通过某种方式自动显示输​​出,或者我可以检测到进程何时等待输入在哪里????我想我可以认为这件事已经完成了!

【问题讨论】:

  • 乍一看,它似乎完全是相对的。谢谢。但是,真的有这么难吗!!我的意思是我希望像 ruby​​ 这样的语言能更简单地完成这些工作
  • 我正在研究 ruby​​_expect 并尝试使用 PTY 进行简单测试,但在 >require "pty"this 是真的,我不能在 Windows 上使用 PTY。如果是这样,那么我也不能使用 ruby​​_expect 吗?

标签: ruby io


【解决方案1】:

我的进一步解决方法结果: Expect 不适用于寡妇,因为 windows 不支持伪终端 (PTY),所以我不能使用 ruby​​_expect 之类的 windows 库!

我尝试将 IO.select 与遇到“错误文件指针”的 IO.read_nonblock 结合使用。有人说non-blocking IO is not supported in windows as well

于是我自己用了一些特殊的字符串来同步读写序列,任务就完成了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2013-08-09
    • 2021-05-28
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多