/ / come ottenere il testo tramite backtick o sistema in Perl - perl, backtick

come ottenere il testo tramite backtick o sistema in Perl - perl, backtick

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 № 1

L'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");