Running process (filehandle-based interface)
Proc is a representation of an invocation of an external process. It provides access to the input, output and error stream as well as the exit code. It is typically created through the
my = run 'echo', 'Hallo world', :out;my = .out.slurp: :close;say "Output was $captured-output.perl()"; # OUTPUT: «Output was "Hallo world\n"␤»
Piping several commands is easy too. To achieve the equivalent of the pipe
echo "Hello, world" | cat -n in Perl 6, and capture the output from the second command, you can do
my = run 'echo', 'Hello, world', :out;my = run 'cat', '-n', :in(.out), :out;say .out.get;
You can also feed the
:in pipe directly from your program, by setting it to
True, which will make the pipe available via
.in method on the
my = run "cat", "-n", :in, :out;.in.say: "Hello,\nworld!";.in.close;say .out.slurp: :close;# OUTPUT: «1 Hello,␤# 2 world!␤»
In order to capture the standard error
:err can be supplied:
my = run "ls", "-l", ".", "qqrq", :out, :err;my = .out.slurp: :close;my = .err.slurp: :close;my = .exitcode;
Use Proc::Async for non-blocking operations.
method new(Proc:: = '-',: = '-',: = '-',Bool : = False,Bool : = True,Bool : = False,Str : = 'UTF-8',Str : = "\n",--> Proc)sub run(* ($, *@),: = '-',: = '-',: = '-',Bool : = False,Bool : = True,Bool : = False,Str : = 'UTF-8',Str : = "\n",: = ,Hash() : =--> Proc)sub shell(,: = '-',: = '-',: = '-',Bool : = False,Bool : = True,Bool : = False,Str : = 'UTF-8',Str : = "\n",: = ,Hash() : =--> Proc)
new creates a new
Proc object, whereas
shell create one and spawn it with the command and arguments provided in
$err are the three standard streams of the to-be-launched program, and default to
"-", which means they inherit the stream from the parent process. Setting one (or more) of them to
True makes the stream available as an IO::Pipe object of the same name, so for example
$proc.out. You can set them to
False to discard them. Or you can pass an existing IO::Handle object (for example IO::Pipe) in, in which case this handle is used for the stream.
$bin controls whether the streams are handled as binary (i.e. Blob object) or text (i.e. Str objects). If
$bin is False,
$enc holds the character encoding to encode strings sent to the input stream and decode binary data from the output and error streams.
$chomp set to
True, newlines are stripped from the output and err streams when reading with
$nl controls what your idea of a newline is.
$merge is set to True, the standard output and error stream end up merged in
method sink(--> Nil)
When sunk, the
Proc object will throw X::Proc::Unsuccessful if the process it ran exited unsuccessfully.
method spawn(* ($, *@), : = , Hash() : = --> Bool)
Proc object with the given command, argument list, working directory, and environment.
method shell(, : = , : --> Bool)
Proc object with the given command and environment which are passed through to the shell for parsing and execution. See
IO::shell for an explanation of which shells are used by default in the most common operating systems.
method command(Proc: --> Array)
The command method is an accessor to an array containing the arguments that were passed when the Proc object was executed via
$*PID value of the process if available, or
method exitcode(Proc: --> Int)
Returns the exit code of the external process, or -1 if it has not exited yet.
Returns the signal number with which the external process was killed, or 0 or an undefined value otherwise.