poll {processx} | R Documentation |
Poll for process I/O or termination
Description
Wait until one of the specified connections or processes produce standard output or error, terminates, or a timeout occurs.
Usage
poll(processes, ms)
Arguments
processes |
A list of connection objects or |
ms |
Integer scalar, a timeout for the polling, in milliseconds. Supply -1 for an infitite timeout, and 0 for not waiting at all. |
Value
A list of character vectors of length one or three.
There is one list element for each connection/process, in the same
order as in the input list. For connections the result is a single
string scalar. For processes the character vectors' elements are named
output
, error
and process
. Possible values for each individual
result are: nopipe
, ready
, timeout
, closed
, silent
.
See details about these below. process
refers to the poll connection,
see the poll_connection
argument of the process
initializer.
Explanation of the return values
-
nopipe
means that the stdout or stderr from this process was not captured. -
ready
means that the connection or the stdout or stderr from this process are ready to read from. Note that end-of-file on these outputs also triggersready
. timeout': the connections or processes are not ready to read from and a timeout happened.
-
closed
: the connection was already closed, before the polling started. -
silent
: the connection is not ready to read from, but another connection was.
Examples
# Different commands to run for windows and unix
cmd1 <- switch(
.Platform$OS.type,
"unix" = c("sh", "-c", "sleep 1; ls"),
c("cmd", "/c", "ping -n 2 127.0.0.1 && dir /b")
)
cmd2 <- switch(
.Platform$OS.type,
"unix" = c("sh", "-c", "sleep 2; ls 1>&2"),
c("cmd", "/c", "ping -n 2 127.0.0.1 && dir /b 1>&2")
)
## Run them. p1 writes to stdout, p2 to stderr, after some sleep
p1 <- process$new(cmd1[1], cmd1[-1], stdout = "|")
p2 <- process$new(cmd2[1], cmd2[-1], stderr = "|")
## Nothing to read initially
poll(list(p1 = p1, p2 = p2), 0)
## Wait until p1 finishes. Now p1 has some output
p1$wait()
poll(list(p1 = p1, p2 = p2), -1)
## Close p1's connection, p2 will have output on stderr, eventually
close(p1$get_output_connection())
poll(list(p1 = p1, p2 = p2), -1)
## Close p2's connection as well, no nothing to poll
close(p2$get_error_connection())
poll(list(p1 = p1, p2 = p2), 0)