2010-08-27 7 views
1

L'hôte Telnet que j'utilise n'a pas de caractère d'invite (il se place juste dans un retour à la ligne vide quand il est fait), alors comment dois-je utiliser le Net::Telnet module perl?Perl Net :: Module Telnet avec shell Telnet sans caractère d'invite

J'ai essayé de définir l'invite à // '' /\s/ ou /\s*/, mais cela n'a pas fonctionné.

'' a donné une erreur en disant qu'il était invalide, et // /\s/ et /\s*/ simplement expiré.

my $t = new Net::Telnet (Timeout => 10, Prompt => '/\s*/'); 

modifier: Cette relie très bien, mais quand il tente d'émettre une commande, il fois parce qu'il ne reconnaît pas l'invite .;

+0

Est-ce que/^ $/work? – hlynur

+0

@hlynur, non, car cela correspondrait après _every_ ligne de sortie. Juste parce que vous n'avez pas encore reçu de sortie, cela ne veut pas dire que ça n'arrive pas. – cjm

Répondre

4

Vous ne pouvez pas utiliser cmd ou login si vous ne parvenez pas à demander une invite au côté distant, car ils dépendent de l'invite pour savoir quand la commande est terminée.

Vous pouvez utiliser $telnet->print('command') pour émettre des commandes. La façon dont vous lisez la sortie dépend de la façon dont vous vous attendez à reconnaître la fin de la sortie.

S'il y a un motif reconnaissable sur la dernière ligne, vous pouvez utiliser waitfor dans le contexte de la liste.

Si vous connaissez le nombre de lignes de sortie, vous pouvez utiliser getline et lire autant de lignes.

Dans le pire des cas, j'utiliserais probablement getline avec un timeout, et supposerais que la commande était terminée après N secondes sans sortie.

Questions connexes