NAME
Command::Interactive- handles interactive (and non-interactive) process invocation through a reliable and easily configured interface.
SYNOPSIS
This module can be used to invoke both interactive and non-interactive commands with predicatable results.
use Command::Interactive;
use Carp;
# Simple, non-interactive usage
my $result = Command::Interactive->new->run("cp foo /tmp/");
croak "Could not copy foo to /tmp/: $result!" if($result);
# Interactive usage supports output parsing
# and automated responses to discovered strings
my $password_prompt = Command::Interactive::Interaction->new({
expected_string => 'Please enter your password:',
response => 'secret',
});
my $my_logging_fh;
my $command = Command::Interactive->new({
echo_output => 1,
output_stream => $my_logging_fh,
interactions => [ $password_prompt ],
});
my $restart_result = $command->run("ssh user\@somehost 'service apachectl restart'");
if($restart_result)
{
warn "Couldn't restart server!";
}
FIELDS
always_use_expect (DEFAULT: FALSE)
Whether to use the Expect
module to execute system commands. By default, Expect is only used if one or more interactions() are specified.
debug_logfile (DEFAULT: undef)
The name of a file to which lots of debugging information should be written. Typically useful only for maintainers. If you want to see what your command is doing, use echo_output() and a debugging filehandle (or just STDOUT).
echo_output (DEFAULT: FALSE)
Whether to echo output to the specified output_stream(). This allows users of Command::Interactive to see what is going on, but it also can clutter an interface with lots of superfluous command output. Use it wisely.
See web_format() for a discussion about how to format command output for web interfaces.
interactions (DEFAULT: [], the empty arrayref)
An array reference of Command::Interactive::Interaction objects that specify the interactions that may (or must) occur during the execution of the command. See Command::Interactive::Interaction
for more information on specifying rules about command interactions.
output_stream (DEFAULT: STDOUT)
The stream object to which output should be sent when echo_output() is enabled. This is any object with a print() method; it needn't have a full IO
-compliant interface.
timeout (DEFAULT: undef)
If defined, represents the timeout (in seconds) that Command::Interactive will wait for output when run() is called.
web_format (DEFAULT: FALSE)
Whether to format strings for web output when print command output as a result of echo_output(). If this is true, \r, \n, and \r\n will be replaced with "<br/>\n".
METHODS
run($command)
This method does the heavy lifting of Command::Interactive. If one or more interactions() are specified (or if always_use_expect() is true), then the heavy lifting is dispatched to _run_via_expect(); otherwise this method uses traditional perl open("$command |")
approach.
$command is expected to be a scalar (string), properly escaped, that could be executed (e.g.) via system() or ``. No matter what command you provide, the bash file descriptors for stdout and stderr are tied together using '2>&1' unless you have done so already. This allows Command::Interactive to capture and react to both regular output and errors using the same mechanism.
run() returns undef if the command is successful, otherwise it returns a string describing why the command failed (or was thought to have failed).
The command you pass in via $command is expected to exit with status code 0 on success. If it returns something different, Command::Interactive will incorrectly conclude that the command failed and will return a message to that effect.
_show_output($chunk_of_output)
If echo_output() is true, this command prints any output from $command to the chosen output_stream(). If web_format() is true, the output is first formatted for HTML by replacing end-of-line characters with "<br/>\n".
_run_via_expect($command)
This method handles running commands with one or more interactions() (or for which always_use_expect() is true) via the Perl module Expect
.
The return semantics of _run_via_expect() are identical to those of run().
_generate_instruction_list()
This method returns information to be passed to Expect
's expect() method, as well as a bookkeeping array using for tracking number of times a given interaction has occurred.
_fixup_command_to_catch_stderr($original_command)
This method appends '2>&1' to the end of any command submitted to run(), except when that filehandle-tying string is already present in the command.
Returns the modified version of $original_command.
_log($line_to_log)
Used for internal logging purposes when debug_logfile() is defined. See the discussion of debug_logfile() for a better way to debug YOUR command's execution; this method is intended for consumption by developers of Command::Interactive.
AUTHOR
Binary.com, <perl@binary.com>
LICENSE
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.