2012-06-05 21 views
8

voglio ottenere l'output di un comando in un array — come questo:Lettura uscita dal comando in Perl serie

my @output = `$cmd`; 

ma sembra che l'output del comando non va nella matrice @output.

Qualche idea su dove va?

+5

Sei sicuro che il tuo comando scrive su STDOUT? Se scrive su STDERR i backtick non verranno catturati senza aggiungere "2> & 1" alla chiamata. – dgw

+3

Come stai determinando che l'output non entra nell'array? –

risposta

2

Abilita controlli di errore automatici:

require IPC::System::Simple; 
use autodie qw(:all); 
⋮ 
my @output = `$cmd`; 
6

L'(standard) uscita non andare a quella matrice:

[email protected]:listing # cat > demo.pl 
#!/usr/bin/perl 
use strict; 
use warnings; 
use v5.14; 
use Data::Dump qw/ddx/; 

my @output = `ls -lh`; 
ddx \@output; 
[email protected]:listing # touch a b c d 
[email protected]:listing # perl demo.pl 
# demo.pl:8: [ 
# "total 8\n", 
# "-rw-r--r-- 1 david staff  0B 5 Jun 12:15 a\n", 
# "-rw-r--r-- 1 david staff  0B 5 Jun 12:15 b\n", 
# "-rw-r--r-- 1 david staff  0B 5 Jun 12:15 c\n", 
# "-rw-r--r-- 1 david staff  0B 5 Jun 12:15 d\n", 
# "-rw-r--r-- 1 david staff 115B 5 Jun 12:15 demo.pl\n", 
# ] 
10

Questo semplice script funziona per me:

#!/usr/bin/env perl 
use strict; 
use warnings; 

my $cmd = "ls";  
my @output = `$cmd`;  
chomp @output; 

foreach my $line (@output) 
{ 
    print "<<$line>>\n"; 
} 

Ha prodotto l'uscita (eccetto per i punti tripli):

$ perl xx.pl 
<<args>> 
<<args.c>> 
<<args.dSYM>> 
<<atob.c>> 
<<bp.pl>> 
... 
<<schwartz.pl>> 
<<timer.c>> 
<<timer.h>> 
<<utf8reader.c>> 
<<xx.pl>> 
$ 

L'output del comando è diviso sui limiti delle linee (per impostazione predefinita, nel contesto dell'elenco). Lo chomp elimina le nuove righe negli elementi dell'array.

+0

l'output non è un errore Non so cosa sia veramente –

+1

Quindi potrebbe essere necessario identificare il comando in modo più chiaro. Ho mostrato il compito a '$ cmd'; non hai mostrato cosa c'è nel comando che stai eseguendo. Hai provato a usare 'ls' o' pwd' o 'echo Hello World' come comando per vedere se ottieni qualcosa di utile? Non hai anche mostrato come stai elaborando la matrice. –