On 11/2/25 7:13 PM, Bruce Gray wrote:
On Nov 2, 2025, at 20:31, ToddAndMargo via perl6-users <[email protected]> wrote: On 11/2/25 4:55 PM, Joseph Brenner wrote:my $proc = run 'echo', 'Raku is Great!', :out, :err; $proc.out.slurp(:close).say; # OUTPUT: «Raku is Great!» $proc.err.slurp(:close).say; # OUTPUT: «»Hi Joseph, The default of both :out and :err is "-", which is STDOUT and STDERR. This is similar to curl's "--output -" which send to the STDOUT. What I find puzzling is where else would they be going?They (STDOUT and STDERR) would be going to the standard filehandles of the *parent* process, just like if you run a command inside a Bash script. The parent in this case is Raku itself, so they would go to your screen, or wherever you have redirect all the Raku STDOUT and/or STDERR to. % raku -e ' say "raku talks to STDOUT"; run(|<ls -d .>); note "raku talks to STDERR"; run(|<ls fake>); ' > a.txt 2>b.txt % cat a.txt raku talks to STDOUT . % cat b.txt raku talks to STDERR ls: fake: No such file or directory The spawned command 'ls' exited unsuccessfully (exit code: 1, signal: 0) in block <unit> at -e line 5Can I modify :out to :out("eraseme.txt") and have the output go to a file (eraseme.txt) instead of STDOUT? That would be kind of cool. Yours in puzzlement, -T`:out` can take a argument, but it needs a filehandle, not a filename. It you want to open it in-line, it must be a *writable* filehandle, so this will not work: :out("eraseme.txt".IO) Instead, use this: :out("eraseme.txt".IO.open(:w)) or, open the filehandle separately, potentially to use it across several `run` commands, then close it manually.
Hi Bruce, I am slowly catching on. :out and :err set to "-" are "capturing" the STDOUT and STDERR to $p.out and $p.err. Otherwise they go to your console/shell. And if you want to alter then, your need to provide and file handle. Thank you! -T
