pub struct Command(/* private fields */);
Expand description
A process builder, providing fine-grained control over how a new process should be spawned.
A default configuration can be
generated using Command::new(program)
, where program
gives a path to the
program to be executed. Additional builder methods allow the configuration
to be changed (for example, by adding arguments) prior to spawning:
use compio_process::Command;
let output = if cfg!(windows) {
Command::new("cmd")
.args(["/C", "echo hello"])
.output()
.await
.expect("failed to execute process")
} else {
Command::new("sh")
.args(["-c", "echo hello"])
.output()
.await
.expect("failed to execute process")
};
let hello = output.stdout;
Command
can be reused to spawn multiple processes. The builder methods
change the command without needing to immediately spawn the process.
use compio_process::Command;
let mut echo_hello = Command::new("sh");
echo_hello.arg("-c").arg("echo hello");
let hello_1 = echo_hello
.output()
.await
.expect("failed to execute process");
let hello_2 = echo_hello
.output()
.await
.expect("failed to execute process");
Similarly, you can call builder methods after spawning a process and then spawn a new process with the modified settings.
use compio_process::Command;
let mut list_dir = Command::new("ls");
// Execute `ls` in the current directory of the program.
list_dir.status().await.expect("process failed to execute");
println!();
// Change `ls` to execute in the root directory.
list_dir.current_dir("/");
// And then execute `ls` again but in the root directory.
list_dir.status().await.expect("process failed to execute");
See std::process::Command
for detailed documents.
Implementations§
Source§impl Command
impl Command
Sourcepub fn arg(&mut self, arg: impl AsRef<OsStr>) -> &mut Self
pub fn arg(&mut self, arg: impl AsRef<OsStr>) -> &mut Self
Adds an argument to pass to the program.
Sourcepub fn args<I, S>(&mut self, args: I) -> &mut Self
pub fn args<I, S>(&mut self, args: I) -> &mut Self
Adds multiple arguments to pass to the program.
Sourcepub fn env<K, V>(&mut self, key: K, val: V) -> &mut Self
pub fn env<K, V>(&mut self, key: K, val: V) -> &mut Self
Inserts or updates an explicit environment variable mapping.
Sourcepub fn envs<I, K, V>(&mut self, vars: I) -> &mut Self
pub fn envs<I, K, V>(&mut self, vars: I) -> &mut Self
Inserts or updates multiple explicit environment variable mappings.
Sourcepub fn env_remove(&mut self, key: impl AsRef<OsStr>) -> &mut Self
pub fn env_remove(&mut self, key: impl AsRef<OsStr>) -> &mut Self
Removes an explicitly set environment variable and prevents inheriting it from a parent process.
Sourcepub fn env_clear(&mut self) -> &mut Self
pub fn env_clear(&mut self) -> &mut Self
Clears all explicitly set environment variables and prevents inheriting any parent process environment variables.
Sourcepub fn current_dir(&mut self, dir: impl AsRef<Path>) -> &mut Self
pub fn current_dir(&mut self, dir: impl AsRef<Path>) -> &mut Self
Sets the working directory for the child process.
Sourcepub fn stdin<S: TryInto<Stdio>>(
&mut self,
cfg: S,
) -> Result<&mut Self, S::Error>
pub fn stdin<S: TryInto<Stdio>>( &mut self, cfg: S, ) -> Result<&mut Self, S::Error>
Configuration for the child process’s standard input (stdin) handle.
Sourcepub fn stdout<S: TryInto<Stdio>>(
&mut self,
cfg: S,
) -> Result<&mut Self, S::Error>
pub fn stdout<S: TryInto<Stdio>>( &mut self, cfg: S, ) -> Result<&mut Self, S::Error>
Configuration for the child process’s standard output (stdout) handle.
Sourcepub fn stderr<S: TryInto<Stdio>>(
&mut self,
cfg: S,
) -> Result<&mut Self, S::Error>
pub fn stderr<S: TryInto<Stdio>>( &mut self, cfg: S, ) -> Result<&mut Self, S::Error>
Configuration for the child process’s standard error (stderr) handle.
Sourcepub fn get_program(&self) -> &OsStr
pub fn get_program(&self) -> &OsStr
Returns the path to the program.
Sourcepub fn get_args(&self) -> CommandArgs<'_>
pub fn get_args(&self) -> CommandArgs<'_>
Returns an iterator of the arguments that will be passed to the program.
Sourcepub fn get_envs(&self) -> CommandEnvs<'_>
pub fn get_envs(&self) -> CommandEnvs<'_>
Returns an iterator of the environment variables explicitly set for the child process.
Sourcepub fn get_current_dir(&self) -> Option<&Path>
pub fn get_current_dir(&self) -> Option<&Path>
Returns the working directory for the child process.
Sourcepub fn spawn(&mut self) -> Result<Child>
pub fn spawn(&mut self) -> Result<Child>
Executes the command as a child process, returning a handle to it.
Sourcepub async fn status(&mut self) -> Result<ExitStatus>
pub async fn status(&mut self) -> Result<ExitStatus>
Executes a command as a child process, waiting for it to finish and collecting its status. The output of child stdout and child stderr will be ignored.
Source§impl Command
impl Command
Sourcepub fn uid(&mut self, id: u32) -> &mut Self
Available on Unix only.
pub fn uid(&mut self, id: u32) -> &mut Self
Sets the child process’s user ID. This translates to a setuid`` call in the child process. Failure in the
setuid` call will cause the spawn to
fail.
Sourcepub fn gid(&mut self, id: u32) -> &mut Self
Available on Unix only.
pub fn gid(&mut self, id: u32) -> &mut Self
Similar to uid
, but sets the group ID of the child process. This has
the same semantics as the uid
field.
Sourcepub unsafe fn pre_exec(
&mut self,
f: impl FnMut() -> Result<()> + Send + Sync + 'static,
) -> &mut Self
Available on Unix only.
pub unsafe fn pre_exec( &mut self, f: impl FnMut() -> Result<()> + Send + Sync + 'static, ) -> &mut Self
Schedules a closure to be run just before the exec
function is
invoked.
§Safety
See CommandExt::pre_exec
.
Sourcepub fn arg0(&mut self, arg: impl AsRef<OsStr>) -> &mut Self
Available on Unix only.
pub fn arg0(&mut self, arg: impl AsRef<OsStr>) -> &mut Self
Set the first process argument, argv[0]
, to something other than the
default executable path.
Sourcepub fn process_group(&mut self, pgroup: i32) -> &mut Self
Available on Unix only.
pub fn process_group(&mut self, pgroup: i32) -> &mut Self
Sets the process group ID (PGID) of the child process.