【发布时间】:2019-10-30 22:33:22
【问题描述】:
我正在尝试向ruby-newt 模块添加更多自动化测试。我的代码似乎可以工作,但仍需要在终端手动点击ENTER 才能完成。
例如下面的代码,\t会切换到下一个按钮,\r会按下按钮,两个命令都执行成功,但是ENTER键还是需要在终端手动按下,否则程序只是无限期挂起。
如果wr.write "\t\r"这一行被注释掉,那么程序会超时,10秒后成功退出。我试过wr.flush,但这无济于事。我也试过在命令中包含\n。
我应该在write 命令中添加任何其他内容以确保子程序成功接收它吗?
require 'newt'
require 'pty'
def newt_run
begin
Newt::Screen.new
Newt::Screen.centered_window(20, 15, 'Button')
b1 = Newt::Button.new(1, 1, 'Button1')
b2 = Newt::Button.new(1, 6, 'Button2')
b = Newt::Button.new(1, 11, 'Exit')
f = Newt::Form.new
f.set_timer(10000)
f.add(b1, b2, b)
rv = f.run
ensure
Newt::Screen.finish
end
end
master, slave = PTY.open
rd, wr = IO.pipe
if fork.nil? then
master.close
wr.close
$stdin.reopen(rd)
$stdout.reopen(slave)
$stderr.reopen(slave)
newt_run
else
slave.close
rd.close
wr.write "\t\r"
Process.wait
end
【问题讨论】:
-
注意:在
def中,您可以只使用ensure而无需明确的begin。