Voglio chiamare un file EXE in Perl che esegue un'azione
Ho provato a chiamare il file exe tramite backtick
e system
ma in entrambi i casi ottengo solo il valore di ritorno
Il file exe stampa del testo sulla console. È possibile catturare anche quello?
Ho esaminato questa variabile ${^CHILD_ERROR_NATIVE}
ma ottengo solo il valore restituito e non il testo
Sto usando Perl 5.14
Grazie in anticipo
risposte:
5 per risposta № 1L'applicazione potrebbe non stampare l'output in STDOUT
ma STDERR
invece, che non viene catturato dall'operatore backtick. Per catturare entrambi, puoi usare quanto segue:
my $binary = "foo.exe";
my $output = `$binary 2>&1`;
Per una cattura più precisa, potresti voler ricorrere a IPC::Open3
con cui è possibile "controllare" tutti i flussi di un processo (IN
, OUT
e ERR
).
1 per risposta № 2
Ero solito eseguire comandi da script perl e catturare l'output in questo modo
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;
}
Controlla se ti aiuta
1 per risposta № 3
Raccomando il capture
e capture_err
funzioni da Scriptalicious.
use Scriptalicious qw(capture);
my $output = capture("my_command", "arg");