Raku kurss / Objekti, ievade/izvade un izņēmumi / Ievade un izvade / Ārējo programmu palaišana 🆕
Proc objekts
Katrs run vai shell izsaukums atdod
Proc objektu — nelielu pierakstu par to, kura programma
izpildījās un kā tā beidza darbu. Iepriekšējie temati izmantoja tā turi
.out, lai nolasītu izvadi; Proc nes
vairāk.
Noderīgākā daļa ir izejas kods. Programma pasaka
tam, kas to palaidis, vai tā izdevusies, ar nelielu veselu skaitli:
0 nozīmē veiksmi, un jebkurš cits skaitlis ir pašas
programmas izvēlēts neveiksmes kods. .exitcode dod šo
skaitli:
my $proc = run 'sh', '-c', 'exit 3';
say $proc.exitcode; # 3Ierastajam jā/nē jautājumam — vai izdevās? — Proc
vienkārši ir patiess, kad izejas kods ir 0, un aplams
citādi, tāpēc to var pārbaudīt tieši:
my $proc = run 'ls', '/', :out;
$proc.out.slurp(:close);
say $proc ?? 'ok' !! 'failed'; # okProc atceras arī komandu, ko palaida, laukā
.command:
my $proc = run 'echo', 'hi', :out;
$proc.out.slurp(:close);
say $proc.command; # (echo hi)Kam jāpaskatās: ja komanda neizdodas un jūs atgriezto
Proc vienkārši ignorējat, Raku ceļ
izņēmumu, nevis ļauj neveiksmei paiet nepamanītai:
run 'sh', '-c', 'exit 1';
# dies: The spawned command 'sh' exited unsuccessfully (exit code: 1, signal: 0)Tā kā nenulles izeja parasti nozīmē, ka kaut kas noticis greizi,
neveiksmīgs Proc, kas tiek izmests, izmet izņēmumu, kad
iziet no redzamības apgabala. Sprūds ir rezultāta izmešana,
nevis izejas koda ignorēšana: ar to vien, ka Proc
saglabājat mainīgajā, pietiek, lai izvairītos no izņēmuma, pat ja tajā
vairs nekad neieskatāties.
my $proc = run 'sh', '-c', 'exit 1'; # no error, even though it failed
# …and $proc is never used againTātad, ja gaidāt, ka komanda varētu neizdoties, paturiet tās
Proc un tad ieskatieties .exitcode (vai
pārbaudiet to kā Būla vērtību), kad vien vēlaties zināt, kas notika.
Prakse
Jūs gaida 1 viktorīna par šī temata saturu.
Kursa navigācija
← Izvades pārtveršana | Viktorīna — Proc objekts →
💪 Vai arī dodieties tieši uz šīs sadaļas
vingrinājumiem.