/ / Perdita dell'output del comando di sistema - perl - perl, comando, sistema, output

Uscita del comando di sistema che perde - perl - perl, comando, sistema, uscita

ho appena iniziato a usare Perl qui. In precedenza ho usato con successo i backtick per acquisire l'output dei comandi di sistema in Perl, come ad esempio:

my @sysOut = `cleartool checkout -nc "$file"`; # works fine!

ma ho riscontrato qualche problema e anche dopo essermi guardato in giro per un po 'non ho trovato la soluzione a questo problema. Sto provando a scrivere uno script Perl per controllare un elenco di file estratti (@allfiles) usando cleartool, tranne se ce ne sono identici al loro predecessore, quindi deselezionarli.

Il modo in cui sto rilevando (... fallendo!) Se sono identici o no è quello di ottenere l'output dal tentativo di check in, vedere se corrisponde /error.*identical/ie, in tal caso, deseleziona il file. Tuttavia, per qualche motivo l'output sembra bypassare l'array in cui lo sto passando.
Vedi il codice che genera questo problema:

foreach my $file (@allfiles){
chomp( my @checkInErr = `cleartool checkin -nc "$file"`);
foreach my $err (@checkInErr) { # if no error, checkin done
if ($err =~ m/error.*identical/i) {  # if there is error:
print $err;
print "No change detected: unchecking out.n"; # uncheckout same version
system "cleartool uncheckout -rm -cact "$file"";
}
}
}

Ecco l'output della mia riga di comando (come se avessi appena usato una chiamata di sistema):

cleartool: Error: Unable to check in "a5TI.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6cm.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6FT.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6pm.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.
cleartool: Error: Unable to check in "a6TI.txt".
cleartool: Error: By default, won"t create version with data identical to predecessor.

SOLUZIONE: controlla anche il flusso di errori std quando afferri l'output (a posteriori questo ha senso mentre stavo cercando di analizzare i messaggi di errore ... oh bene)

my @checkInErr = `cleartool checkin -nc "$file" 2>&1`;

risposte:

1 per risposta № 1

È possibile che l'output dell'errore da cleartool non venga visualizzato sull'output standard (stdout). Con un po 'di fortuna, viene visualizzato sull'errore standard (stderr). In tal caso, dovrebbe funzionare:

system "cleartool uncheckout -rm -cact "$file" 2>&1";