system2 Invoke a System Command
Description
system2 invokes the OS command specified by command.
Usage
system2(command, args = character(),
stdout = "", stderr = "", stdin = "", input = NULL,
env = character(), wait = TRUE,
minimized = FALSE, invisible = TRUE, timeout = 0)
Arguments
command | the system command to be invoked, as a character string. |
args | a character vector of arguments to |
stdout, stderr | where output to ‘stdout’ or ‘stderr’ should be sent. Possible values are |
stdin | should input be diverted? |
input | if a character vector is supplied, this is copied one string per line to a temporary file, and the standard input of |
env | character vector of name=value strings to set environment variables. |
wait | a logical (not |
timeout | timeout in seconds, ignored if 0. This is a limit for the elapsed time running |
minimized, invisible | arguments that are accepted on Windows but ignored on this platform, with a warning. |
Details
Unlike system, command is always quoted by shQuote, so it must be a single command without arguments.
For details of how command is found see system.
On Windows, env is only supported for commands such as R and make which accept environment variables on their command line.
Some Unix commands (such as some implementations of ls) change their output if they consider it to be piped or redirected: stdout = TRUE uses a pipe whereas stdout =
"some_file_name" uses redirection.
Because of the way it is implemented, on a Unix-alike stderr =
TRUE implies stdout = TRUE: a warning is given if this is not what was specified.
When timeout is non-zero, the command is terminated after the given number of seconds. The termination works for typical commands, but is not guaranteed: it is possible to write a program that would keep running after the time is out. Timeouts can only be set with wait = TRUE.
Timeouts cannot be used with interactive commands: the command is run with standard input redirected from /dev/null and it must not modify terminal settings. As long as tty tostop option is disabled, which it usually is by default, the executed command may write to standard output and standard error.
Value
If stdout = TRUE or stderr = TRUE, a character vector giving the output of the command, one line per character string. (Output lines of more than 8095 bytes will be split.) If the command could not be run an R error is generated. If command runs but gives a non-zero exit status this will be reported with a warning and in the attribute "status" of the result: an attribute "errmsg" may also be available.
In other cases, the return value is an error code (0 for success), given the invisible attribute (so needs to be printed explicitly). If the command could not be run for any reason, the value is 127 and a warning is issued (as from R 3.5.0). Otherwise if wait = TRUE the value is the exit status returned by the command, and if wait = FALSE it is 0 (the conventional success value).
If the command times out, a warning is issued and the exit status is 124.
Note
system2 is a more portable and flexible interface than system. It allows redirection of output without needing to invoke a shell on Windows, a portable way to set environment variables for the execution of command, and finer control over the redirection of stdout and stderr. Conversely, system (and shell on Windows) allows the invocation of arbitrary command lines.
There is no guarantee that if stdout and stderr are both TRUE or the same file that the two streams will be interleaved in order. This depends on both the buffering used by the command and the OS.
See Also
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.