drieux wrote: > On Dec 24, 2003, at 12:07 AM, Tushar Gokhale wrote: > > > I've opened a connection to remote machine through perl script and > > sending > > commands and can see the output on screen but I want to put that > > output in > > File along with the commands that were send. how do I do that? > > The obvious first question is how does the > "output" get to the command line? > > Is your code directly printing it? Or is the code > that you are using to connect to the remote machine > merely 'leaking' output to the command line? > > allow me to illustrate > > my $foo_bar = Net::Foo::Bar->new(@net_connect_stuff); > > foreach my $cmd (@remote_cmd_list) > { > $foo_bar->do_remote($cmd); > } > > in that instance you would know which commands were be sent > to the remote host.... and what ever that do_remote() method > is doing is 'leaking' information to the command line rather > than returning it to your programme.
In the case above, one posssible solution would be a localized redirection of STDOUT: use strict; use warnings; my @remote_cmd_list = ('print "Hello, world!\n";'); # my $foo_bar = Net::Foo::Bar->new(@net_connect_stuff); my $filename = 'debug_runs/debug_' . time . '.log'; { open DEBUG_LOG, ">$filename" or die "Couldn't output to debug log: $!"; local *STDOUT = *DEBUG_LOG; foreach my $cmd (@remote_cmd_list) { do_remote($cmd); } } print "Commands have been run. Their output is stored in $filename \n" . " If you see this message, then output has also been restored to normal\n", " If you do not see this message, contact your system administrator\n"; sub do_remote { my $command = shift; eval $command; } Which should allow normal IO to continue as soon as output from the commands has been captured. Joseph -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>