Umleiten von STDOUT und STDERR an eine Variable

9

Ich möchte STDERR und STDOUT auf eine Variable umleiten. Ich habe das getan.

%Vor%

Das Problem mit system . Ich möchte, dass die Ausgabe dieses Anrufs ebenfalls erfasst wird.

    
Deck 11.12.2010, 06:19
quelle

5 Antworten

3

Möchten Sie die Ausgabe in einer Variablen erfassen? Wenn ja, verwenden Sie Backticks oder qx{} mit entsprechender Umleitung. Zum Beispiel könnten Sie verwenden:

%Vor%

(Ich habe zufällig die Programme pth1, pth2 und pth3 im Verzeichnis - sie wurden OK; pth4 und höher schreiben Fehler in stderr; die Umleitung war notwendig.)

Sie sollten immer den Erfolg von Operationen wie open() überprüfen.

Warum ist das notwendig? Weil das Schreiben auf eine Variable die Zusammenarbeit des Prozesses erfordert, der das Schreiben ausführt - und make weiß nicht, wie man kooperiert.

    
Jonathan Leffler 11.12.2010, 06:24
quelle
12

verwenden Capture :: Tiny !

    
salva 11.12.2010 07:36
quelle
2

Der Grund dafür ist, dass die STDOUT- und STDERR- "Dateihandles" nicht äquivalent zu stderr- und stdout-Handles sind, die von der Shell für die Perl-Binärdatei bereitgestellt werden. Um das zu erreichen, was Sie wollen, sollten Sie offen anstelle von system

verwenden     
grncdr 11.12.2010 06:29
quelle
1

Warum nicht use IPC::Open3 ?

    
Dallaylaen 11.12.2010 06:42
quelle
0

Es gibt mehrere Möglichkeiten, STDOUT umzuleiten und wiederherzustellen . Einige von ihnen arbeiten auch mit STDERR. Hier sind meine zwei Favoriten:

Verwenden von select :

%Vor%

Verwenden von local :

%Vor%

Viel Spaß.

    
mndrix 10.07.2014 15:40
quelle

Tags und Links