in reply to Re^2: Reading terminal input while program is running
in thread Reading terminal input while program is running

Sorry, my magic crystal ball is still out for repair (damn Grima!). You'll need to post code for anyone to figure out what's wrong in your script. Please make an effort to cut it down to the part that's necessary (i.e. the bit that's not doing what you think it ought to) before doing so though.


There are ten types of people: those that understand binary and those that don't.

Replies are listed 'Best First'.
Re^4: Reading terminal input while program is running
by minixman (Beadle) on Feb 01, 2006 at 10:59 UTC
    Here is the part which reads a log file which process all the information.
    $file=File::Tail->new(name=>$name, maxinterval=>1, adjustafter=> +1); while (defined($line=$file->read)) { my($logindate,$loginuser,$logoutdate,$logoutuser,$count); #if($line =~ /validateLogin\((.*)\)/){ $v = $1;} if($line =~ /INFO\s\s(\d+)(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+ +),(\d+)\s\[(.*)\]\s\((.*)\) - validateLogin\((.*)\)/){ $logindate = "$1$2-$3-$4 $5:$6:$7,$8"; $loginuser = "$11"; if(($logging)&&($debug)){&writelog(1,"DEBUG: Tail Event Logi +n found user date string = $logindate user = $loginuser");} } }
    So i guess somewhere whilst it is processing the file i would want to be able to lookout for user intput on the terminal

      Your while loop only executes whenever File::Tail finds a new line appended to the file you're watching. So you could do this (reformatted a bit for readability):

      my $file=File::Tail->new( name => $name, maxinterval => 1, adjustafter => 1); while (defined(my $line=$file->read)) { my($logindate,$loginuser,$logoutdate,$logoutuser,$count); if($line =~ /INFO\s\s(\d+)(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+),(\d ++)\s\[(.*)\]\s\((.*)\) - validateLogin\((.*)\)/){ $logindate = "$1$2-$3-$4 $5:$6:$7,$8"; $loginuser = "$11"; if(($logging)&&($debug)){ &writelog(1,"DEBUG: Tail Event Login found user date strin +g = $logindate user = $loginuser"); } } if (my $inp= ReadLine (-1)) { print "Got this command: $inp"; } }

      And this would work, but the loop would only check for input anytime a line is added to the log, and block until then. If you don't want to do that you'll need to use File::Tail->select instead of read, take a look at the example that comes with File::Tail and the perldoc on that.


      There are ten types of people: those that understand binary and those that don't.
        This works perfectly, simple and perfect thanks