7 use constant IS_VMS => $^O eq 'VMS' ? 1 : 0;
8 use constant IS_WIN32 => $^O eq 'MSWin32' ? 1 : 0;
9 use constant IS_WIN98 => (IS_WIN32 and !Win32::IsWinNT()) ? 1 : 0;
12 use vars qw[ @ISA $VERSION @EXPORT_OK $VERBOSE $DEBUG
13 $USE_IPC_RUN $USE_IPC_OPEN3 $WARN
20 $USE_IPC_RUN = IS_WIN32 && !IS_WIN98;
21 $USE_IPC_OPEN3 = not IS_VMS;
24 @EXPORT_OK = qw[can_run run];
28 use Params::Check qw[check];
29 use Module::Load::Conditional qw[can_load];
30 use Locale::Maketext::Simple Style => 'gettext';
36 IPC::Cmd - finding and running system commands made easy
40 use IPC::Cmd qw[can_run run];
42 my $full_path = can_run('wget') or warn 'wget is not installed!';
44 ### commands can be arrayrefs or strings ###
45 my $cmd = "$full_path -b theregister.co.uk";
46 my $cmd = [$full_path, '-b', 'theregister.co.uk'];
48 ### in scalar context ###
50 if( scalar run( command => $cmd,
54 print "fetched webpage successfully: $buffer\n";
58 ### in list context ###
59 my( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
60 run( command => $cmd, verbose => 0 );
63 print "this is what the command printed:\n";
64 print join "", @$full_buf;
67 ### check for features
68 print "IPC::Open3 available: " . IPC::Cmd->can_use_ipc_open3;
69 print "IPC::Run available: " . IPC::Cmd->can_use_ipc_run;
70 print "Can capture buffer: " . IPC::Cmd->can_capture_buffer;
72 ### don't have IPC::Cmd be verbose, ie don't print to stdout or
73 ### stderr when running commands -- default is '0'
74 $IPC::Cmd::VERBOSE = 0;
78 IPC::Cmd allows you to run commands, interactively if desired,
79 platform independent but have them still work.
81 The C<can_run> function can tell you if a certain binary is installed
82 and if so where, whereas the C<run> function can actually execute any
83 of the commands you give it and give you a clear return value, as well
84 as adhere to your verbosity settings.
88 =head2 $bool = IPC::Cmd->can_use_ipc_run( [VERBOSE] )
90 Utility function that tells you if C<IPC::Run> is available.
91 If the verbose flag is passed, it will print diagnostic messages
92 if C<IPC::Run> can not be found or loaded.
99 my $verbose = shift || 0;
101 ### ipc::run doesn't run on win98
104 ### if we dont have ipc::run, we obviously can't use it.
105 return unless can_load(
106 modules => { 'IPC::Run' => '0.55' },
107 verbose => ($WARN && $verbose),
110 ### otherwise, we're good to go
114 =head2 $bool = IPC::Cmd->can_use_ipc_open3( [VERBOSE] )
116 Utility function that tells you if C<IPC::Open3> is available.
117 If the verbose flag is passed, it will print diagnostic messages
118 if C<IPC::Open3> can not be found or loaded.
123 sub can_use_ipc_open3 {
125 my $verbose = shift || 0;
127 ### ipc::open3 works on every platform, but it can't capture buffers
129 return unless can_load(
130 modules => { map {$_ => '0.0'} qw|IPC::Open3 IO::Select Symbol| },
131 verbose => ($WARN && $verbose),
137 =head2 $bool = IPC::Cmd->can_capture_buffer
139 Utility function that tells you if C<IPC::Cmd> is capable of
140 capturing buffers in it's current configuration.
144 sub can_capture_buffer {
147 return 1 if $USE_IPC_RUN && $self->can_use_ipc_run;
148 return 1 if $USE_IPC_OPEN3 && $self->can_use_ipc_open3 && !IS_WIN32;
155 =head2 $path = can_run( PROGRAM );
157 C<can_run> takes but a single argument: the name of a binary you wish
158 to locate. C<can_run> works much like the unix binary C<which> or the bash
159 command C<type>, which scans through your path, looking for the requested
162 Unlike C<which> and C<type>, this function is platform independent and
163 will also work on, for example, Win32.
165 It will return the full path to the binary you asked for if it was
166 found, or C<undef> if it was not.
173 # a lot of VMS executables have a symbol defined
175 if ( $^O eq 'VMS' ) {
177 my $syms = VMS::DCLsym->new;
178 return $command if scalar $syms->getsym( uc $command );
183 require ExtUtils::MakeMaker;
185 if( File::Spec->file_name_is_absolute($command) ) {
186 return MM->maybe_command($command);
189 for my $dir (split /\Q$Config::Config{path_sep}\E/, $ENV{PATH}) {
190 my $abs = File::Spec->catfile($dir, $command);
191 return $abs if $abs = MM->maybe_command($abs);
196 =head2 $ok | ($ok, $err, $full_buf, $stdout_buff, $stderr_buff) = run( command => COMMAND, [verbose => BOOL, buffer => \$SCALAR] );
198 C<run> takes 3 arguments:
204 This is the command to execute. It may be either a string or an array
206 This is a required argument.
208 See L<CAVEATS> for remarks on how commands are parsed and their
213 This controls whether all output of a command should also be printed
214 to STDOUT/STDERR or should only be trapped in buffers (NOTE: buffers
215 require C<IPC::Run> to be installed or your system able to work with
218 It will default to the global setting of C<$IPC::Cmd::VERBOSE>,
219 which by default is 0.
223 This will hold all the output of a command. It needs to be a reference
225 Note that this will hold both the STDOUT and STDERR messages, and you
226 have no way of telling which is which.
227 If you require this distinction, run the C<run> command in list context
228 and inspect the individual buffers.
230 Of course, this requires that the underlying call supports buffers. See
231 the note on buffers right above.
235 C<run> will return a simple C<true> or C<false> when called in scalar
237 In list context, you will be returned a list of the following items:
243 A simple boolean indicating if the command executed without errors or
248 If the first element of the return value (success) was 0, then some
249 error occurred. This second element is the error code the command
250 you requested exited with, if available.
254 This is an arrayreference containing all the output the command
256 Note that buffers are only available if you have C<IPC::Run> installed,
257 or if your system is able to work with C<IPC::Open3> -- See below).
258 This element will be C<undef> if this is not the case.
262 This is an arrayreference containing all the output sent to STDOUT the
264 Note that buffers are only available if you have C<IPC::Run> installed,
265 or if your system is able to work with C<IPC::Open3> -- See below).
266 This element will be C<undef> if this is not the case.
270 This is an arrayreference containing all the output sent to STDERR the
272 Note that buffers are only available if you have C<IPC::Run> installed,
273 or if your system is able to work with C<IPC::Open3> -- See below).
274 This element will be C<undef> if this is not the case.
278 See the C<HOW IT WORKS> Section below to see how C<IPC::Cmd> decides
279 what modules or function calls to use when issuing a command.
286 ### if the user didn't provide a buffer, we'll store it here.
289 my($verbose,$cmd,$buffer);
291 verbose => { default => $VERBOSE, store => \$verbose },
292 buffer => { default => \$def_buf, store => \$buffer },
293 command => { required => 1, store => \$cmd,
294 allow => sub { !ref($_[0]) or ref($_[0]) eq 'ARRAY' }
298 unless( check( $tmpl, \%hash, $VERBOSE ) ) {
299 Carp::carp(loc("Could not validate input: %1", Params::Check->last_error));
303 print loc("Running [%1]...\n", (ref $cmd ? "@$cmd" : $cmd)) if $verbose;
305 ### did the user pass us a buffer to fill or not? if so, set this
306 ### flag so we know what is expected of us
307 ### XXX this is now being ignored. in the future, we could add diagnostic
308 ### messages based on this logic
309 #my $user_provided_buffer = $buffer == \$def_buf ? 0 : 1;
311 ### buffers that are to be captured
312 my( @buffer, @buff_err, @buff_out );
315 my $_out_handler = sub {
317 return unless defined $buf;
319 print STDOUT $buf if $verbose;
321 push @buff_out, $buf;
325 my $_err_handler = sub {
327 return unless defined $buf;
329 print STDERR $buf if $verbose;
331 push @buff_err, $buf;
335 ### flag to indicate we have a buffer captured
336 my $have_buffer = __PACKAGE__->can_capture_buffer ? 1 : 0;
338 ### flag indicating if the subcall went ok
341 ### IPC::Run is first choice if $USE_IPC_RUN is set.
342 if( $USE_IPC_RUN and __PACKAGE__->can_use_ipc_run( 1 ) ) {
343 ### ipc::run handlers needs the command as a string or an array ref
345 __PACKAGE__->_debug( "# Using IPC::Run. Have buffer: $have_buffer" )
348 $ok = __PACKAGE__->_ipc_run( $cmd, $_out_handler, $_err_handler );
350 ### since IPC::Open3 works on all platforms, and just fails on
351 ### win32 for capturing buffers, do that ideally
352 } elsif ( $USE_IPC_OPEN3 and __PACKAGE__->can_use_ipc_open3( 1 ) ) {
354 __PACKAGE__->_debug( "# Using IPC::Open3. Have buffer: $have_buffer" )
357 ### in case there are pipes in there;
358 ### IPC::Open3 will call exec and exec will do the right thing
359 $ok = __PACKAGE__->_open3_run(
360 ( ref $cmd ? "@$cmd" : $cmd ),
361 $_out_handler, $_err_handler, $verbose
364 ### if we are allowed to run verbose, just dispatch the system command
366 __PACKAGE__->_debug( "# Using system(). Have buffer: $have_buffer" )
368 $ok = __PACKAGE__->_system_run( (ref $cmd ? "@$cmd" : $cmd), $verbose );
372 $$buffer = join '', @buffer if @buffer;
374 ### return a list of flags and buffers (if available) in list
375 ### context, or just a simple 'ok' in scalar
378 ? ($ok, $?, \@buffer, \@buff_out, \@buff_err)
388 my $_out_handler = shift;
389 my $_err_handler = shift;
390 my $verbose = shift || 0;
392 ### Following code are adapted from Friar 'abstracts' in the
393 ### Perl Monastery (http://www.perlmonks.org/index.pl?node_id=151886).
394 ### XXX that code didn't work.
395 ### we now use the following code, thanks to theorbtwo
397 ### define them beforehand, so we always have defined FH's
400 my $kidout = Symbol::gensym();
401 my $kiderror = Symbol::gensym();
403 ### Dup the filehandle so we can pass 'our' STDIN to the
404 ### child process. This stops us from having to pump input
405 ### from ourselves to the childprocess. However, we will need
406 ### to revive the FH afterwards, as IPC::Open3 closes it.
407 ### We'll do the same for STDOUT and STDERR. It works without
408 ### duping them on non-unix derivatives, but not on win32.
409 my @fds_to_dup = ( IS_WIN32 && !$verbose
410 ? qw[STDIN STDOUT STDERR]
413 __PACKAGE__->__dup_fds( @fds_to_dup );
416 my $pid = IPC::Open3::open3(
418 (IS_WIN32 ? '>&STDOUT' : $kidout),
419 (IS_WIN32 ? '>&STDERR' : $kiderror),
423 ### use OUR stdin, not $kidin. Somehow,
424 ### we never get the input.. so jump through
425 ### some hoops to do it :(
426 my $selector = IO::Select->new(
427 (IS_WIN32 ? \*STDERR : $kiderror),
429 (IS_WIN32 ? \*STDOUT : $kidout)
432 STDOUT->autoflush(1); STDERR->autoflush(1); STDIN->autoflush(1);
433 $kidout->autoflush(1) if UNIVERSAL::can($kidout, 'autoflush');
434 $kiderror->autoflush(1) if UNIVERSAL::can($kiderror, 'autoflush');
436 ### add an epxlicit break statement
437 ### code courtesy of theorbtwo from #london.pm
438 OUTER: while ( my @ready = $selector->can_read ) {
440 for my $h ( @ready ) {
443 ### $len is the amount of bytes read
444 my $len = sysread( $h, $buf, 4096 ); # try to read 4096 bytes
446 ### see perldoc -f sysread: it returns undef on error,
448 if( not defined $len ) {
449 warn(loc("Error reading from process: %1", $!));
453 ### check for $len. it may be 0, at which point we're
454 ### done reading, so don't try to process it.
455 ### if we would print anyway, we'd provide bogus information
456 $_out_handler->( "$buf" ) if $len && $h == $kidout;
457 $_err_handler->( "$buf" ) if $len && $h == $kiderror;
459 ### child process is done printing.
460 last OUTER if $h == $kidout and $len == 0
464 waitpid $pid, 0; # wait for it to die
466 ### restore STDIN after duping, or STDIN will be closed for
467 ### this current perl process!
468 __PACKAGE__->__reopen_fds( @fds_to_dup );
470 return if $?; # some error occurred
478 my $_out_handler = shift;
479 my $_err_handler = shift;
481 STDOUT->autoflush(1); STDERR->autoflush(1);
487 # '/Users/kane/sources/p4/other/archive-extract/t/src/x.tgz',
494 # ['/usr/bin/gzip', '-cdf',
495 # '/Users/kane/sources/p4/other/archive-extract/t/src/x.tgz']
497 # ['/usr/bin/tar', '-tf -']
501 my @command; my $special_chars;
504 for my $item (@$cmd) {
505 if( $item =~ /([<>|&])/ ) {
506 push @command, $aref, $item;
508 $special_chars .= $1;
513 push @command, $aref;
515 @command = map { if( /([<>|&])/ ) {
516 $special_chars .= $1; $_;
520 } split( /\s*([<>|&])\s*/, $cmd );
523 ### if there's a pipe in the command, *STDIN needs to
524 ### be inserted *BEFORE* the pipe, to work on win32
525 ### this also works on *nix, so we should do it when possible
526 ### this should *also* work on multiple pipes in the command
527 ### if there's no pipe in the command, append STDIN to the back
528 ### of the command instead.
529 ### XXX seems IPC::Run works it out for itself if you just
530 ### dont pass STDIN at all.
531 # if( $special_chars and $special_chars =~ /\|/ ) {
532 # ### only add STDIN the first time..
534 # @command = map { ($_ eq '|' && not $i++)
539 # push @command, \*STDIN;
543 # \*STDIN is already included in the @command, see a few lines up
544 return IPC::Run::run( @command,
555 my $verbose = shift || 0;
557 my @fds_to_dup = $verbose ? () : qw[STDOUT STDERR];
558 __PACKAGE__->__dup_fds( @fds_to_dup );
560 ### system returns 'true' on failure -- the exit code of the cmd
563 __PACKAGE__->__reopen_fds( @fds_to_dup );
573 STDOUT => [qw|>&|, \*STDOUT, Symbol::gensym() ],
574 STDERR => [qw|>&|, \*STDERR, Symbol::gensym() ],
575 STDIN => [qw|<&|, \*STDIN, Symbol::gensym() ],
578 ### dups FDs and stores them in a cache
583 __PACKAGE__->_debug( "# Closing the following fds: @fds" ) if $DEBUG;
585 for my $name ( @fds ) {
586 my($redir, $fh, $glob) = @{$Map{$name}} or (
587 Carp::carp(loc("No such FD: '%1'", $name)), next );
589 ### MUST use the 2-arg version of open for dup'ing for
590 ### 5.6.x compatibilty. 5.8.x can use 3-arg open
591 ### see perldoc5.6.2 -f open for details
592 open $glob, $redir . fileno($fh) or (
593 Carp::carp(loc("Could not dup '$name': %1", $!)),
597 ### we should re-open this filehandle right now, not
599 if( $redir eq '>&' ) {
600 open( $fh, '>', File::Spec->devnull ) or (
601 Carp::carp(loc("Could not reopen '$name': %1", $!)),
610 ### reopens FDs from the cache
615 __PACKAGE__->_debug( "# Reopening the following fds: @fds" ) if $DEBUG;
617 for my $name ( @fds ) {
618 my($redir, $fh, $glob) = @{$Map{$name}} or (
619 Carp::carp(loc("No such FD: '%1'", $name)), next );
621 ### MUST use the 2-arg version of open for dup'ing for
622 ### 5.6.x compatibilty. 5.8.x can use 3-arg open
623 ### see perldoc5.6.2 -f open for details
624 open( $fh, $redir . fileno($glob) ) or (
625 Carp::carp(loc("Could not restore '$name': %1", $!)),
629 ### close this FD, we're not using it anymore
639 my $msg = shift or return;
640 my $level = shift || 0;
642 local $Carp::CarpLevel += $level;
656 C<run> will try to execute your command using the following logic:
662 If you have C<IPC::Run> installed, and the variable C<$IPC::Cmd::USE_IPC_RUN>
663 is set to true (See the C<GLOBAL VARIABLES> Section) use that to execute
664 the command. You will have the full output available in buffers, interactive commands are sure to work and you are guaranteed to have your verbosity
665 settings honored cleanly.
669 Otherwise, if the variable C<$IPC::Cmd::USE_IPC_OPEN3> is set to true
670 (See the C<GLOBAL VARIABLES> Section), try to execute the command using
671 C<IPC::Open3>. Buffers will be available on all platforms except C<Win32>,
672 interactive commands will still execute cleanly, and also your verbosity
673 settings will be adhered to nicely;
677 Otherwise, if you have the verbose argument set to true, we fall back
678 to a simple system() call. We cannot capture any buffers, but
679 interactive commands will still work.
683 Otherwise we will try and temporarily redirect STDERR and STDOUT, do a
684 system() call with your command and then re-open STDERR and STDOUT.
685 This is the method of last resort and will still allow you to execute
686 your commands cleanly. However, no buffers will be available.
690 =head1 Global Variables
692 The behaviour of IPC::Cmd can be altered by changing the following
695 =head2 $IPC::Cmd::VERBOSE
697 This controls whether IPC::Cmd will print any output from the
698 commands to the screen or not. The default is 0;
700 =head2 $IPC::Cmd::USE_IPC_RUN
702 This variable controls whether IPC::Cmd will try to use L<IPC::Run>
703 when available and suitable. Defaults to true if you are on C<Win32>.
705 =head2 $IPC::Cmd::USE_IPC_OPEN3
707 This variable controls whether IPC::Cmd will try to use L<IPC::Open3>
708 when available and suitable. Defaults to true.
710 =head2 $IPC::Cmd::WARN
712 This variable controls whether run time warnings should be issued, like
713 the failure to load an C<IPC::*> module you explicitly requested.
715 Defaults to true. Turn this off at your own risk.
723 When you provide a string as this argument, the string will be
724 split on whitespace to determine the individual elements of your
725 command. Although this will usually just Do What You Mean, it may
726 break if you have files or commands with whitespace in them.
728 If you do not wish this to happen, you should provide an array
729 reference, where all parts of your command are already separated out.
730 Note however, if there's extra or spurious whitespace in these parts,
731 the parser or underlying code may not interpret it correctly, and
737 gzip -cdf foo.tar.gz | tar -xf -
739 should either be passed as
741 "gzip -cdf foo.tar.gz | tar -xf -"
745 ['gzip', '-cdf', 'foo.tar.gz', '|', 'tar', '-xf', '-']
747 But take care not to pass it as, for example
749 ['gzip -cdf foo.tar.gz', '|', 'tar -xf -']
751 Since this will lead to issues as described above.
755 Currently it is too complicated to parse your command for IO
756 Redirections. For capturing STDOUT or STDERR there is a work around
757 however, since you can just inspect your buffers for the contents.
763 C<IPC::Run>, C<IPC::Open3>
768 Jos Boumans E<lt>kane@cpan.orgE<gt>.
770 =head1 ACKNOWLEDGEMENTS
772 Thanks to James Mastros and Martijn van der Streek for their
773 help in getting IPC::Open3 to behave nicely.
778 copyright (c) 2002 - 2006 Jos Boumans E<lt>kane@cpan.orgE<gt>.
781 This library is free software;
782 you may redistribute and/or modify it under the same
783 terms as Perl itself.