/ / Ausgabe des Systembefehls undicht - Perl - Perl, Befehl, System, Ausgabe

Systembefehlsausgabe Leaking - Perl - Perl, Befehl, System, Ausgabe

Ich fange gerade an, Perl hier zu verwenden. Ich habe zuvor erfolgreich Backticks verwendet, um die Systembefehlsausgabe in Perl zu erfassen, z. B .:

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

Aber ich habe Probleme, und selbst nach längerer Suche habe ich keine Lösung für dieses Problem gefunden. Ich versuche, ein Perl-Skript zu schreiben, um eine Liste der ausgecheckten Dateien einzuchecken (@allfiles) mit cleartool, außer wenn welche mit dem Vorgänger identisch sind, dann auschecken.

Die Art und Weise, wie ich (... versage!) Feststelle, ob sie identisch sind oder nicht, besteht darin, die Ausgabe des Eincheckversuchs abzurufen und zu überprüfen, ob sie übereinstimmt /error.*identical/iDeaktivieren Sie in diesem Fall die Datei. Aus irgendeinem Grund scheint die Ausgabe das Array zu umgehen, in das ich sie übergebe.
Siehe Code, der dieses Problem erzeugt:

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"";
}
}
}

Hier ist meine Befehlszeilenausgabe (als hätte ich gerade einen system () - Aufruf verwendet):

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.

LÖSUNG: Überprüfen Sie auch den Standardfehlerstrom, wenn Sie die Ausgabe abrufen.

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

Antworten:

1 für die Antwort № 1

Es ist möglich, dass die Fehlerausgabe von cleartool nicht auf der Standardausgabe (stdout) ausgegeben wird. Mit etwas Glück wird sie auf der Standardfehlerausgabe (stderr) ausgegeben. Wenn ja, sollte dies funktionieren:

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