in reply to How to execute external script from CGI

Hi,

"no luck" isn't "diagnostic" ;)

Capture::Tiny,

use Capture::Tiny qw/ capture /; sub Download { my @cmd = ( 'wget', '--help' ); my( $stdout, $stderr, $exit ) = capture { system { $cmd[0] } @cmd; };; die "( $stdout, $stderr, $exit )"; }

Replies are listed 'Best First'.
Re^2: How to execute external script from CGI
by vskatusa (Acolyte) on May 22, 2020 at 18:41 UTC
    Hi, thanks for your advice. I did try this code:
    #updateQuotes.pl use strict; use warnings; use Capture::Tiny qw(capture); print "Content-type: text/html\n\n"; my $cmd = `C:\\batchfiles\\getUpdates.bat`; my ($stdout, $stderr, $exit) = capture { system( $cmd ); }; print "stdout = $stdout<br> stderr = $stderr <br> exit = $exit";
    The batch file did execute....however I got the following output
    Error from open(IO::Handle=GLOB(0x1501b30), <&STDIN): Bad file descrip +tor at C:/Strawberry/perl/vendor/lib/Capture/Tiny.pm line 107. Captur +e::Tiny::_open(IO::Handle=GLOB(0x1501b30), "<&STDIN") called at C:/St +rawberry/perl/vendor/lib/Capture/Tiny.pm line 184 Capture::Tiny::_cop +y_std() called at C:/Strawberry/perl/vendor/lib/Capture/Tiny.pm line +357 Capture::Tiny::_capture_tee(1, 1, 0, 0, CODE(0x1cb9c8)) called at + C:\inetpub\wwwroot\mywebsite\admin\updateQuotes.pl line 11

      That's because you are taking the output from C:\\batchfiles\\getUpdates.bat and then trying to run that again as another command. That is almost certainly wrong. Do not use backticks when assigning to $cmd, use single quotes. Better yet, use an array instead just like our anonymous brother showed you.

      Best by far, of course, is not to run the subprocess at all but do what you need to do within the one perl process.