Почему истекает время ожидания моей программы Net :: Telnet? - PullRequest
0 голосов
/ 30 марта 2010

Я написал небольшой код для подключения к удаленному серверу, используя Perl, но наблюдаю сообщения об ошибках

#!/usr/bin/perl -w

use Net::Telnet;

$telnet = new Net::Telnet ( Timeout=>60, Errmode=>'die');

$telnet->open('192.168.50.40');

$telnet->waitfor('/login:/');

$telnet->print('queen');

$telnet->waitfor('/password:/');

$telnet->print('kinG!');

$telnet->waitfor('/:/');

$telnet->print('vol >> C:\result.txt');

$telnet->waitfor('/:/');

$telnet->cmd("mkdir vol");

$telnet->print('mkdir vol234');

$telnet->cmd("mkdir vol1");

$telnet->waitfor('/\$ $/i'); 

$telnet->print('whoamI');

print $output;

Но во время работы я получаю следующие ошибки

C:\>perl -c E:\test\net.pl

E:\test\net.pl syntax OK

C:\>perl E:\test\net.pl

command timed-out at E:\test\net.pl line 13

C:\>

Помоги мне в этом. Я новичок в Perl.

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Я не уверен насчет Net :: Telnet, но использование '/: /' (с кавычками), я думаю, является проблемой. То есть /: / (внутри косой черты) - это регулярное выражение, но с кавычками это просто строка, которая должна появиться на терминале (то есть она ожидает строку '/: /' - косая черта, две точки, косая черта).

Для отладки таких программ (если Net :: Telnet не отображает взаимодействие с удаленной системой) вы можете просто написать: напечатать «Я жду входа в систему ... \ n» в строках перед waitfor ()

0 голосов
/ 30 марта 2010

Почему вы не используете Net :: Telnet login метод для входа? Когда вы находитесь на таком низком уровне, вы должны обрабатывать все детали самостоятельно. Если вы заглянете в источник для этого метода, то увидите, что он проделал довольно большую работу, включая kludge, чтобы обойти ошибку входа в Linux.

...