2013-04-05 183 views
1

我正在执行perl脚本中的telnet命令,如下所示。如何在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`后;命令,因为我们知道它会打开telnet命令提示符,但所有其他命令仍在执行相同的旧命令prmopt,因此它说clients1pollers不会被识别为内部或外部命令。

can any 1 help me out pls? 在advanch中感谢

+0

你需要/要/必须使用CPAN模块为:( – 2013-04-05 12:57:48

回答

3

与外部进程(如telnet)的通信比您想象的要复杂得多,因为您必须正确处理缓冲,等待输入等等。

如果您确实需要完整的交互,则使用Expect(https://metacpan.org/module/RGIERSIG/Expect-1.21/Expect.pod)的规范方法。

如果您实际上不需要交互,那么远程命令运行程序如sshrsh(您可以从perl当然调用)就足够了。

+0

的规范方式来处理这个是使用Expect(https://metacpan.org/module/RGIERSIG/Expect-1.21/Expect.pod),如果你真的需要完全互动。 – picnic4u 2013-04-11 07:37:17

1

这是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(); 
+0

我必须为我的本地主机添加端口号码,所以我怎么能?你可以给我一些线索吗? – picnic4u 2013-04-05 12:17:32

+0

'my $ t = new Net :: Telnet(Timeout => 5,Prompt => $ params {'default_prompt'},Port => $ port);'#你可以选择完整的选项列表鳍d在cpan的页面http://search.cpan.org/~jrogers/Net-Telnet-3.03/lib/Net/Telnet.pm – Suic 2013-04-05 12:20:06

0

在系统中安装TCL(ActiveTcl8.5.13.0.296436-Win32的IX86-threaded.exe适用于Windows)。 然后从命令来自为teacup install Expect

下面的脚本运行修正后安装Expect软件包要求

#!/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. 
+0

上面的一个是我的工作代码。 – picnic4u 2013-04-08 08:57:20

相关问题