Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Expecting more from expect

by TilRMan (Friar)
on Jul 08, 2004 at 01:36 UTC ( #372644=note: print w/ replies, xml ) Need Help??


in reply to Expecting more from expect

You may need to reset the accumulator size. From the Expect manpage:

$object->max_accum($maximum_buffer_length | undef)

Set the maximum accumulator size for object. This is useful if you think that the accumulator will grow out of hand during expect() calls. Since the buffer will be matched by every match_pattern it may get slow if the buffer gets too large. Returns current value if called without parameters. Not defined by default.

P.S. The scp(1) program might be a better way to go.


Comment on Re: Expecting more from expect
Download Code
Re^2: Expecting more from expect
by bret.foreman (Acolyte) on Jul 08, 2004 at 16:33 UTC
    Hmmm. Maybe this is a bug in my version of PERL (v5.6.1 on Linux). I made the following test program called "test.pl":
    #!/usr/bin/perl use strict; use Expect; my $object = Expect->spawn( "bash" ) or die "Could not spawn bash shell.\n"; $object->log_stdout(0); $object->max_accum( 128 * 512 ); my $header = "Test Log Header"; $object->send( "cat test_log.txt\n" ); my ($matched_pattern_position, $error, $successfully_matching_string, $before_match, $after_match) =$object->expect( 5 , -re => $header ); if( $error ne undef ) { die "Could not find header.\n"; } my @rows = split /^/ , $after_match; printf "Found %d lines after match in file.\n", scalar( @rows );
    And created the file "test_log.txt" that looks something like this:
    Test Log Header 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% 040702003113 21% 1175 1859 8239 8744 2221 0 0 4 100% 7% T 6% ...for 160 lines...
    Then see the following:
    Output of "wc test_log.txt": 161 2243 9776 test_log.txt Ouput of "test.pl": Found 34 lines after match in file.
    So there's no ssh or any other complication, just the basic expect buffer of a cat result. Can someone else try this and confirm that it works as expected on their system?

    Thanks,

    Bret

      My apologies -- I read the OP too hastily.

      Again, will scp do the trick?

      You are trying to use the $after_match to grab everything after a match. This is not the way Expect works. It will only read what it needs in order to match the pattern you specified. You need to match the end of the file and then take everything before the end.

      #untested my $prompt = "my_unique_custom_prompt_aint_it_neat>"; $object->send("export PS1=$prompt\r"); $object->expect(10, $prompt); $object->send("cat file.txt\r"); $object->expect(10, $header); $object->expect(120, $prompt); my $contents = $object->before();

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://372644]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (8)
As of 2014-08-28 02:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (255 votes), past polls