So erfassen Sie STDOUT und STDERR in zwei verschiedenen Variablen mithilfe von Backticks in Perl

7

Nehmen wir an, ich möchte ein externes Programm aus meinem Skript mit Backticks ausführen und gleichzeitig STDOUT und STDERR in zwei verschiedenen Variablen erfassen. Wie kann ich das machen? Vorläufig, wenn ich dieses Skript ausführe ...

%Vor%

... wenn es keinen Fehler gibt, funktioniert alles gut, aber wenn der Befehl einen Fehler auslöst, wird dieser Fehler in der Befehlszeile ausgegeben und ich möchte nicht, dass das passiert. Ich möchte den Fehler auch erfassen. Nichts muss auf dem Bildschirm gedruckt werden. Irgendwelche Ideen?

    
raz3r 05.12.2011, 11:29
quelle

4 Antworten

5

In der Perl-FAQ haben Sie verschiedene Möglichkeiten, wie Sie vorgehen möchten:

Ссылка

    
Pablo Marin-Garcia 05.12.2011, 14:30
quelle
11

Sie müssen nicht den ganzen Weg zu open3 gehen, was IIRC nur für das Lesen und Schreiben eines externen Befehls ist, und selbst dann gibt es andere Methoden.

Für Ihr Problem schlage ich vor, Capture::Tiny zu verwenden, das STDOUT und STDERR von allem erfassen (oder sogar abzweigen) kann in seinem Block laufen. Zum Beispiel für Ihre Frage:

%Vor%

Für ein anderes Beispiel betrachte diesen funktionierenden Code:

%Vor%

was mir gerade gegeben hat:

%Vor%     
Joel Berger 20.12.2011 06:00
quelle
8

Die einzige Möglichkeit, dies mit Backticks zu tun, ist das Umleiten in eine Datei innerhalb des Shell-Befehls:

%Vor%

Wenn Sie die STDERR in Ihrem Skript erfassen möchten, benötigen Sie IPC :: Open3 statt Backticks

    
Colin Fine 05.12.2011 11:35
quelle
0

IO :: CaptureOutput

ist ein sehr praktischer Wrapper für das, was Sie tun möchten.

    
John 05.12.2011 19:40
quelle

Tags und Links