Chcem zavolať súbor EXE v Perle, ktorý vykoná nejakú akciu
Skúsil som zavolať súbor exe cez backtick
a system
ale v obidvoch prípadoch dostávam iba návratovú hodnotu
Súbor exe tlačí nejaký text na konzolu. Je možné zachytiť aj to?
Pozrel som sa do tejto premennej ${^CHILD_ERROR_NATIVE}
ale dostanem iba návratovú hodnotu a nie text
Používam Perl 5.14
Vopred ďakujem
odpovede:
5 pre odpoveď č. 1Aplikácia nemusí tlačiť svoj výstup na STDOUT
ale STDERR
namiesto toho operátor backtick nie je zachytený. Na zachytenie oboch môžete použiť nasledovné:
my $binary = "foo.exe";
my $output = `$binary 2>&1`;
Pre lepšie vyladenie snímok sa možno budete chcieť uchýliť IPC::Open3
pomocou ktorého môžete „riadiť“ všetky prúdy procesu (IN
, OUT
a ERR
).
1 pre odpoveď č. 2
Vykonával som príkazy z perl skriptu a takto som zachytával výstup
sub execute_command() {
my($host) = @_;
open(COMMAND_IN, "your_command |");
while (<COMMAND_IN>)
{ #The COMMAND_IN will have the output of the command
#Read the output of your command here...
$ans = $_;
}
close(COMMAND_IN);
return $ans;
}
Skontrolujte, či vám to pomáha
1 pre odpoveď č. 3
Odporúčam capture
a capture_err
funkcie od Písma.
use Scriptalicious qw(capture);
my $output = capture("my_command", "arg");