Я пытаюсь добавить еще несколько автоматических тестов в модуль 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