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?
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?
Abilita controlli di errore automatici:
require IPC::System::Simple;
use autodie qw(:all);
⋮
my @output = `$cmd`;
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",
# ]
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.
l'output non è un errore Non so cosa sia veramente –
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. –
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
Come stai determinando che l'output non entra nell'array? –