Wie kann ich ein externes Kommando zu starten und zu fangen seine Ausgabe in Perl?
Ich bin neu in Perl und möchten wissen, einen Weg, um ein externes Kommando zu starten (nennen wir es prg
) in den folgenden Szenarien:
- Laufen
prg
seinenstdout
nur. - Laufen
prg
seinenstderr
nur. - Laufen
prg
seinenstdout
undstderr
getrennt.
InformationsquelleAutor der Frage gameover | 2010-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die backtics führen Sie Ihr externes Programm und fangen seine
stdout
undstderr
.Standardmäßig die backticks verwerfen die
stderr
und nur die Rückkehrstdout
des externen Programms.SoErfassen
stdout
des Programms cmd und verwerfenstderr
.Erfassen nur
stderr
Sie können die shell verwenden, die Datei-Deskriptoren:Gleichermaßen erfassen
stdout
undstderr
Sie tun können:Mithilfe der oben genannten, Sie werden nicht in der Lage zu unterscheiden
stderr
ausstdout
. Zu separtestdout
ausstderr
umleiten kann sowohl in eine separate Datei, und Lesen der Dateien:InformationsquelleAutor der Antwort codaddict
Können Sie IPC::Open3 oder IPC::Run. Lesen Sie auch Wie kann ich capture STDERR von einem externen Befehl von perlfaq8.
InformationsquelleAutor der Antwort ghostdog74
In den meisten Fällen können Sie die
qx//
- operator (oder backticks). Es interpoliert Saiten und führt Sie mit der Schale verwenden, so können Sie Umleitungen.Erfassen eines Befehls STDOUT (STDERR ist nicht betroffen):
Einfangen-Befehl STDERR und STDOUT zusammen:
Einfangen-Befehl STDERR, aber wirf seine STDOUT (Reihenfolge ist hier wichtig):
Austausch eines Befehls von STDOUT und STDERR um zu erfassen STDERR, aber lassen Sie die STDOUT zu kommen die alten STDERR:
Lesen beide ein Kommando STDOUT und seine STDERR getrennt, es ist am einfachsten, leiten Sie Sie separat in Dateien und Lesen Sie dann aus diesen Dateien, wenn das Programm fertig ist:
InformationsquelleAutor der Antwort Eugene Yarmash