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:
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?
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.
Dies führt zu
%Vor% Im speziellen Fall des Wegwerfens der Ausgabedaten sollte stattdessen :!out
oder :!err
verwendet werden.
Wenn Sie möchten, dass die Daten nur für Sie abgefangen werden: :out
und :err
machen genau das;