[英]how to run command on telnet command prompt in perl script
我正在perl脚本中执行telnet命令,如下所示。
$telnetOutput = `telnet localhost 4505`;
print "\n telnet command output: $telnetOutput \n";
$clients = `clients`;
print"\n $clients\n";
$clientNumber_or_anyOtherKey = `1`;
print "\n $clientNumber_or_anyOtherKey \n";
$pollers = `pollers`;
print "\n $pollers\n";`
但运行$ telnetOutput = `telnet localhost 4505
4505`; 命令,我们知道它将打开telnet命令提示符,但所有其他命令仍然在相同的旧命令prmopt中执行,因此它说clients
或1
或pollers
不被识别为内部或外部命令。
任何1可以帮助我吗? 谢谢advanch
与telnet等外部进程进行通信比你想象的要复杂得多,因为你必须正确处理缓冲,等待输入等等。
如果您确实需要完全交互,那么使用Expect( https://metacpan.org/module/RGIERSIG/Expect-1.21/Expect.pod )的规范方法就是这样做。
如果你实际上不需要交互,那么像ssh
或rsh
这样的远程命令运行器(你可以从perl调用它)就足够了。
这是telnet连接到d-link des-1228路由器并执行2个命令的工作示例。 如果你想改变它:
#!/usr/bin/perl
use strict;
use warnings;
use Net::Telnet;
my $params;
$params{'login'}='root';
$params{'password'}='hardpass';
$params{'default_prompt'}='/DES-[^:]+:.#/'; #change it to regexp matching your prompt
my $host = '192.168.1.20';
my $t=new Net::Telnet(Timeout=>5, Prompt=>$params{'default_prompt'}, Errmode=>sub{next;});
$t->open(Host=>$host, Timeout=>2);
my $res=$t->login($params{'login'}, $params{'password'});
return if $res!=1;
$t->cmd('disable clipaging');
my @lines=$t->cmd('show fdb'); #output here
$t->close();
在系统中安装TCL
(ActiveTcl8.5.13.0.296436-win32-ix86-threaded.exe for windows)。 然后从teacup install Expect
安装Expect
Package from Command
修改后需要在脚本下运行
#!/usr/bin/expect -f
#!usr/bin/expect
package require Expect
# Test expect script to telnet.
spawn telnet localhost portnumber
expect "TradeAggregator>"
send "3\r"
expect "Client:"
send "1\r"
expect "1-Client>"
send "2\r"
expect "Client Pollers"
send "2\r"
expect "1-NYMEX UTBAPI"
send "1\r"
expect "2-NYMEX UTBAPI"
send "Test_123\r"
expect "Are"
send "n\r"
send "exit\r"
send "exit\r"
send "exit\r"
# end of expect script.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.