> -----Original Message-----
> From: Gupta, Ashish [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, October 25, 2001 3:21 AM
> To: '[EMAIL PROTECTED]'
> Subject: system() and STDOUT & STDERR
> 
> 
> please help me solve another prob i am facing.
> 
> i have 2 scripts --> a.pl and b.pl
> both scripts have a paramter called -logfile.
> if this is specified,  the STDOUT and STDERR are redirected to this.
> 
> now,  I call b.pl from within a.pl
> using system().
> 
> the documentation for system() says that the STDOUT,  STDERR 
> of the new
> process are inherited from the parent process.
> so, I expect that if I do not specify -logfile for b.pl but 
> specify -logfile
> for a.pl,  then the output for b.pl should also go to the 
> logfile for a.pl
> but the output of b.pl is lost.
> 
> if I do not specify the logfile for either script,  then 
> everything comes
> out fine on STDOUT.
> 
> I am pasting the progs below :
> 
> Thanks,
> Ashish
> 
> #=======================
> # a.pl
> #=======================
> 
> use Getopt::Long ;
> 
> @cl = @ARGV ;  # preserve for printing 
> GetOptions (   
>                 "logfile=s"   => \$logfile
>            );
> 
> # if logfile defined, set it up.
> if (defined ($logfile)) {
>       open (LOGFILE, ">>$logfile") or ERR_HANDLER
> ("main:LogFile:Cannot_Open") ;
>       open (STDOUT ,  ">&LOGFILE");    # redefine STDOUT and STDERR to
> point to LOGFILE
>       open (STDERR ,  ">&LOGFILE");
>       $| = 1 ;                         # better if logs are updated
> instantly
> }
> 
> print ("$0 :: Starting ...\n") ;
> print ("CommandLine : @cl\n") ;
> print ("calling b.pl ...\n\n");
> system ("b.pl") ;
> print ("$0 :: Finished ...\n") ;
> 
> #====================
> # b.pl
> #====================
> 
> use Getopt::Long ;
> 
> @cl = @ARGV ;  # preserve for printing 
> GetOptions (    
>                 "logfile=s"   => \$logfile
>            );
> 
> # if logfile defined, set it up.
> if (defined ($logfile)) {
>       open (LOGFILE, ">>$logfile") or ERR_HANDLER
> ("main:LogFile:Cannot_Open") ;
>       open (STDOUT ,  ">&LOGFILE");    # redefine STDOUT and STDERR to
> point to LOGFILE
>       open (STDERR ,  ">&LOGFILE");
>       $| = 1 ;                         # better if logs are updated
> instantly
> }
> 
> print ("$0 :: Starting ...\n") ;
> print ("CommandLine : @cl\n") ;
> print ("$0 :: Finished ...\n") ;

Are you sure b.pl is running correctly? You aren't checking the return value
of system().

Your scripts as posted do not have the #!/usr/bin/perl line, so
system("b.pl") 
will be passed to the unix shell and not to perl.

Your example works fine for me, as long as I put the #!/usr/bin/perl lines
at the top. I get the following output in the log file:

a.pl :: Starting ...
CommandLine : -logfile test
calling b.pl ...

./b.pl :: Starting ...
CommandLine :
./b.pl :: Finished ...
a.pl :: Finished ...

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to