Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: How can I show all input and output with

by frozenwithjoy (Priest)
on Oct 06, 2014 at 22:02 UTC ( #1103024=note: print w/replies, xml ) Need Help??

in reply to How can I show all input and output with

I see two main problems.

First, the following lines are in the wrong order for what you want your output to be:

print "$command\n"; $exp->send("$command\n"); $exp->expect(1, '-re','\(\d+\)');

You probably want this order instead:

$exp->send("$command\n"); print "$command\n"; $exp->expect(1, '-re','\(\d+\)');

Second, this:

my $counter = 1; print "($counter) ";

Should just be this:

my $counter = 0;

The extra stuff is just junk since you print and increment the counter in your loop. This change will fix printing 1 and 2 together like you observed here: (1) (2) Here is the second command

EDIT: Hmmm. Looking at your scripts more closely, I'm having second thoughts about this. What if you just print it all from the server script? Like this:

while (<STDIN>) { chomp; $counter++; print "($counter) $_\n"; if ($_ eq "error") {print "Error on command #$counter\n";} if ($_ eq "commit") {print "Committing data\n";} if ($_ eq "exit") {print "Exiting program...\n"; exit;} }

Replies are listed 'Best First'.
Re^2: How can I show all input and output with
by GeorgeAdams (Initiate) on Oct 06, 2014 at 22:35 UTC

    @frozenwithjoy, thanks for the reply. To answer your questions:

    1. It doesn't seem that reversing the order of the commands
      print "$command\n";
      makes any difference either to the STDOUT or logfile output. It still gives:
      (1) (2) Here is the second command
      (3) Error on command #3
      (4) commit
      This is the last command
      Committing data
      (5) (6) exit
      Exiting program...
    2. The server script has to print out the "(1) " before it receives any input. When it gets a line, it simply prints out "(2) " , waits for the next line, prints "(3) ", waits for the next line, etc. The code isn't optimized, but that's at least the explanation of why the $counter = 1 and the first print statement comes before the loop.

      That is, if you ran the server script and entered stuff, you'd get:

      (1) This is the first line I typed.  Now I'm hitting <ENTER>
      (2) I'm typing more stuff.
      (3) exit
      Exiting program...
    3. Good question. The server script is actually representing what I cannot control in this. It may be a company-wide program I'm trying to interact with, or a Juniper router, or an IDS box, or probably a lot of other things. So unfortunately for this example I have to pretend that I can't modify the server's output. All I can do is interact with the (program, router, server, etc.) myself, see what it outputs when I interact with it manually, then try to reconstruct that exact output when my script interacts with the (program, router, server, etc.) in the same way.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (2)
As of 2023-04-01 16:40 GMT
Find Nodes?
    Voting Booth?

    No recent polls found