Regular expressions

M

mark

i am attempting to write a script using Net::Telnet. The script telnets to
a machine
logs in and issues a command to list the config. Tthe output of the command
pauses
about every screenfull and gives the user the prompt " --More-- ". The
script
contains the followin code to account fot the prompt.

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

the script does not proceed past the " --More-- " prompt. this problems
seems to have stumpt me. does anyone have any suggestions for me?

Thanks
mark
 
E

Eric Amick

i am attempting to write a script using Net::Telnet. The script telnets to
a machine
logs in and issues a command to list the config. Tthe output of the command
pauses
about every screenfull and gives the user the prompt " --More-- ". The
script
contains the followin code to account fot the prompt.

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

Hyphens are special only within character classes, so I'd remove the
backslashes for readability if nothing else. Are you absolutely certain
the prompt ends with exactly one space?
$telnet->print('\s');

This looks suspicious. Shouldn't that be a space in the quotes? You
probably want put() instead of print(); print() sends out a newline
automatically, and you wouldn't press return when typing it manually.
 
M

mark

Eric Amick said:
Hyphens are special only within character classes, so I'd remove the
backslashes for readability if nothing else. Are you absolutely certain
the prompt ends with exactly one space?


This looks suspicious. Shouldn't that be a space in the quotes? You
probably want put() instead of print(); print() sends out a newline
automatically, and you wouldn't press return when typing it manually.


ya, i tried exactly one space prior to trying the /s. ya fairly certain it
is just one space. i was thought it might
be sending an unprintable character for what ever reason, so i changed
input_log to a dump_file and checked
the last character in it. the end of the file just one character with
character code 20. I just tried using the put in
place of the print, but didn't seem to help.

Thanks mark
mark
 
P

Peter Pentchev

mark said:
i am attempting to write a script using Net::Telnet. The script telnets to
a machine
logs in and issues a command to list the config. Tthe output of the command
pauses
about every screenfull and gives the user the prompt " --More-- ". The
script
contains the followin code to account fot the prompt.

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

the script does not proceed past the " --More-- " prompt. this problems
seems to have stumpt me. does anyone have any suggestions for me?

There could be several problems here.

First, input buffering could pose a problem. The Net::Telnet documentation
explicitly states that all input is buffered; in my limited testing,
the waitfor() method does indeed return lines that do *not* end with an
end-of-line, but I am not sure that this will always be the case.
In other words, the problem could be Net::Telnet's waitfor() not returning
until a whole line has been read, and the --More-- prompt does not really
contain a CR/LF at the end.

Second, are you sure that the string you should be matching for is
the exact sequence of characters '-', '-', 'M', 'o', 'r', 'e', etc?
I mean, some pagers use the "backspace convention" (for lack of a better
name that I can think of right now) to indicate bold, underline and such:
for bold, the pager outputs 'M', backspace, 'M'; for underline, it prints
'_', backspace, 'M'. If the '--More-- ' prompt is bold for some reason,
then '--More-- ' will probably not match it.

Those are two reasons that I can think of offhand.

G'luck,
Peter
 
A

adey

i am attempting to write a script using Net::Telnet. The script telnets to
a machine
logs in and issues a command to list the config. Tthe output of the command
pauses
about every screenfull and gives the user the prompt " --More-- ". The
script
contains the followin code to account fot the prompt.

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

the script does not proceed past the " --More-- " prompt. this problems
seems to have stumpt me. does anyone have any suggestions for me?

Thanks
mark
Hi Mark,

I use the module all the time. The non Perl solution to your problem
is this;

I would suggest you command the machine to dump the whole of the
config in one go.

For instance, if you are attempting to list the config on a Cisco
router, you could issue the command "term len 0" prior to issuing the
command to list the config.

Adey
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,777
Messages
2,569,604
Members
45,224
Latest member
BettieToom

Latest Threads

Top