Ändert Perls $ * OUT die Standardausgabe für untergeordnete Prozesse?

9

Ich spielte mit shell und wie es sich verhält, wenn ich die Standard-Dateihandles im aufrufenden Programm ändere. Proc sagt:

  

$ in, $ out und $ err sind die drei Standard-Streams des zu startenden Programms und standardmäßig "-", was bedeutet, dass sie den Stream vom übergeordneten Prozess erben.

Soweit ich das beurteilen kann, benutzt das externe Programm nicht dieselben Dateigriffe:

%Vor%

Die Ausgabe zeigt, dass beim Öffnen von / dev / null und dem Zuweisen des Dateihandles zu $*OUT die Ausgabe des aktuellen Programms nicht im Terminal angezeigt wird (es gibt keine Ausgabe, die mit% beginnt Code%). Wenn ich jedoch 3. aufruft, wird die Standardausgabe an die ursprüngliche Standardausgabe übergeben:

%Vor%

Ich mache mir keine Sorgen darüber, wie ich das erreichen kann. Ich kann ein shell -Objekt erstellen und Dateihandles dorthin übergeben.

Gibt es noch etwas anderes?

    
brian d foy 28.02.2017, 09:40
quelle

1 Antwort

4

Standardmäßig ist das IO :: Handle in $*OUT an das STDOUT-Dateihandle des Betriebssystems gebunden.

shell und run lassen Sie einfach den erzeugten Prozess die Low-Level-STDOUT-Datei verwenden, die an Perl 6 übergeben wurde, sofern Sie nichts anderes angeben.

Perl 6 ändert nichts an der äußeren Umgebung bis zu dem Moment, bevor es einen neuen Prozess hervorbringt.

Am einfachsten ist es, das Dateihandle-Objekt, das Sie verwenden möchten, dem Aufruf shell oder run mit einem benannten Argument zu übergeben.

%Vor%

Dies führt zu

%Vor%

Im speziellen Fall des Wegwerfens der Ausgabedaten sollte stattdessen :!out oder :!err verwendet werden.

%Vor% %Vor%

Wenn Sie möchten, dass die Daten nur für Sie abgefangen werden: :out und :err machen genau das;

%Vor% %Vor%     
Brad Gilbert 28.02.2017 21:11
quelle

Tags und Links