in reply to How to redirect the output of system call

This sounds like the same problem you asked about in system command not working after connection with cgi breaks and How to run a process in background?. Did you follow any of the advice in those threads? What was the result? What code do you have now, and what problem do you have now?

  • Comment on Re: How to redirect the output of system call

Replies are listed 'Best First'.
Re^2: How to redirect the output of system call
by advait (Beadle) on Jul 08, 2008 at 18:31 UTC
    I tried all of them still its not working.
    $command ="nice R --slave --args $DirName $SubDirName < read_param +eters_by_file_batch.R > $SubDir?outR.txt"; my $oput=`$command`;
    I am lost
      my $oput=`$command` waits for $command to finish. It seems that you don't want this, so you need to start it in the background. Probably not with `...`.

      There are quite some suggestions in the previous threads as well as in the article by merlyn I linked in this thread. Go read about them, and try to fix it.

      It looks like you are forgetting to include the ampersand at the end, which is the thing that tells the shell to run the command as a background job. Also, it looks like you have a shell "magic" character (question mark) in the output file name -- I think that was supposed to be a slash? And I wonder about your variable names... Are "$SubDirName" and "$SubDir" supposed to be two different strings? Finally, as mentioned above, you really don't want to run the command in backticks.

      That looks to me like four different errors in just two lines of code. I guess you are lost.

      Try it like this (some of the changes relative to your two lines are just meant to make it look better):

      my $ifile = "read_parameters_by_file_batch"; my $ofile = "outR.txt"; my @args = ( $DirName, $SubDirName ); my $cmd = "R --slave --args @args < $ifile > $SubDirName/$ofile 2> +/dev/null &" my $failed = system( $cmd ); if ( $failed ) { die "$0: command failed: ($failed) $!\n trying: $cmd\n"; }
      Try running it that way from a shell first, to see if it does what you want (there's a chance you might need to fix something in the command line syntax, so be sure you have that right before trying it via http).

      Then, when you try it in your cgi script (or whatever), if it fails, be sure to check the server's error log. If you can't do that, try using the "FatalsToBrowser" trick in CGI, so that the error report goes to the browser.

      If you still have trouble and decide you want to post another question, you had better include the actual code you are using, and the actual error message(s) you are getting. Just saying "it doesn't work" is no way to make progress. If necessary, create a small script that does nothing else except demonstrate the problem, so you can post it in full. That will give us more of what we need in order to help.