Ruby Net :: Telnet waitfor()不起作用

时间:2014-12-16 05:19:55

标签: ruby regex telnet waitforsingleobject

我已经检查了许多不同的方法来解决这个问题,它可能是环境特有的。 我在Ruby中创建脚本以远程登录到远程服务器,登录,输入shell类型(登录后它是一个提示,并且没有"提示"在前面)然后输入用户ID下一个提示。目前它通过用户登录并传递,但在术语部分冻结。 我试图使用正则表达式,字符串,睡眠,然后只是放(" xterm"但没有任何东西允许它通过这个提示。  这是一段代码片段,它被挂起并输出结果:

$telnet = Net::Telnet::new("Host" => 'hostname',
                       "Output_log" => 'output.txt',
                       "Dump_log" => 'Dump.txt',
                       "Binmode" => false,
                       "Timeout" => false,
                       "Prompt" => /.* $ $/) { |c| print c }
$telnet.login("user", "pass") { |c| print c }
$telnet.waitfor("TERM = (xterm) ")
$telnet.puts("xterm") { |c| print c }
$telnet.waitfor(Match => /Enter\s*$/) { |c| print c }
$telnet.puts("userid")

输出如下:

HP-UX ds107492 B.11.11 U 9000/800 (tm)

login: user
Password: 
Please wait...checking for disk quotas
. i

.[ci

.*s1^i

See /etc/copyright for copyright notices
You have mail.
'You have mail.'
TERM = (xterm) 

1 个答案:

答案 0 :(得分:1)

$s.waitfor("Match" => /TERM\s*/){ |c| print c }
$s.print("xterm\n"){ |c| print c }

似乎是答案,它允许我超越提示。仍然不确定这个正则表达式和我尝试的所有其他人之间的区别是:/