Kurso de Raku / Objektoj, en- kaj eligo kaj escepto / Enigo kaj eligo / Ruli eksterajn programojn 🆕
Kapti la eligon
Por legi tion, kion ekstera programo presas, anstataŭ lasi ĝin iri al
la ekrano, transdonu :out dum lanĉo. La redonita
Proc tiam havas tenilon .out, el kiu vi povas
legi:
my $proc = run 'echo', 'hello', :out;
my $output = $proc.out.slurp(:close);
say $output.chomp; # hello:out redirektas la norman eligon de la programo en la
Proc. La tenilo .out funkcias kiel la
dosierteniloj el la antaŭa sekcio, kaj .slurp legas ĉion el
ĝi samtempe. La adverbo :close estas oportuna mallongigo:
post legado, ĝi fermas la tenilon por vi — la sama ordigo, kiun vi faris
eksplicite per .close sur dosiertenilo — do nenio restas
malfermita. Fine, .chomp forigas la finan linifinon, kiun
echo aldonas.
La samo funkcias kun shell, kio estas oportuna por kapti
la rezulton de dukto:
my $proc = shell 'echo hello | tr a-z A-Z', :out;
say $proc.out.slurp(:close).chomp; # HELLOVi ankaŭ povas kapti la erarfluon, per :err kaj la
responda tenilo .err. Transdoni kaj :out kaj
:err tenas la du fluojn apartaj, ĉiun en sia propra tenilo,
do vi povas legi ilin aparte:
my $proc = run 'sh', '-c', 'echo out-line; echo err-line >&2', :out, :err;
say 'stdout: ', $proc.out.slurp(:close).chomp; # stdout: out-line
say 'stderr: ', $proc.err.slurp(:close).chomp; # stderr: err-lineĈi tie la ŝela komando presas unu linion al norma eligo kaj unu al
norma erarfluo (>&2 redirektas al ĝi). Ĉar ni petis
ambaŭ fluojn, .out kaj .err tenas ilin
sendepende — la normala eligo de la programo neniam miksiĝas kun ĝiaj
diagnozoj.
Kapti eligon estas la maniero uzi eksteran programon kiel konstruelementon — rulu ĝin, legu ĝian rezulton, kaj daŭrigu kun tiuj datumoj en via propra programo.
Kursa navigado
← Kvizo — Ruli programojn | La objekto Proc →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.