Struct std::process::Command 1.0.0[−][src]
pub struct Command { /* fields omitted */ }
Expand description
进程生成器,提供对如何生成新进程的细粒度控制。
可以使用 Command::new(program)
生成默认配置,其中 program
提供了要执行的程序的路径。
其他生成器方法允许在生成之前更改配置 (例如,通过添加参数) :
use std::process::Command; let output = if cfg!(target_os = "windows") { Command::new("cmd") .args(["/C", "echo hello"]) .output() .expect("failed to execute process") } else { Command::new("sh") .arg("-c") .arg("echo hello") .output() .expect("failed to execute process") }; let hello = output.stdout;Run
Command
可以重用到 spawn 的多个进程。
构建器方法无需立即使进程 spawn 即可更改命令。
use std::process::Command; let mut echo_hello = Command::new("sh"); echo_hello.arg("-c") .arg("echo hello"); let hello_1 = echo_hello.output().expect("failed to execute process"); let hello_2 = echo_hello.output().expect("failed to execute process");Run
同样,您可以在生成进程之后调用构建器方法,然后使用修改后的设置 spawn 新建一个进程。
use std::process::Command; let mut list_dir = Command::new("ls"); // 在程序的当前目录中执行 `ls`。 list_dir.status().expect("process failed to execute"); println!(); // 更改 `ls` 以在根目录中执行。 list_dir.current_dir("/"); // 然后再次在根目录中执行 `ls`。 list_dir.status().expect("process failed to execute");Run
Implementations
使用以下默认配置创建一个新的 Command
,以在路径 program
处启动该程序:
- 程序无参数
- 继承当前进程的环境
- 继承当前进程的工作目录
- 为
spawn
或status
继承 stdin/stdout/stderr,但为output
创建管道
提供了生成器方法来更改这些默认值,并以其他方式配置该进程。
如果 program
不是绝对路径,则将以 OS 定义的方式搜索 PATH
。
可以通过在 Command 上设置 PATH
环境变量来控制要使用的搜索路径,但这在 Windows 上有一些实现上的限制 (请参见 issue #37519)。
Examples
基本用法:
use std::process::Command; Command::new("sh") .spawn() .expect("sh command failed to start");Run
添加参数以传递给程序。
每次使用只能传递一个参数。因此,而不是:
.arg("-C /path/to/repo")Run
用法是:
.arg("-C") .arg("/path/to/repo")Run
要传递多个参数,请参见 args
。
注意,该参数不是通过 shell 传递的,而是按字面意义提供给程序的。 这意味着 shell 语法,例如引号,转义字符,单词拆分,全局模式,替换等。
没有效果。
Examples
基本用法:
use std::process::Command; Command::new("ls") .arg("-l") .arg("-a") .spawn() .expect("ls command failed to start");Run
添加或更新多个环境变量映射。
Examples
基本用法:
use std::process::{Command, Stdio}; use std::env; use std::collections::HashMap; let filtered_env : HashMap<String, String> = env::vars().filter(|&(ref k, _)| k == "TERM" || k == "TZ" || k == "LANG" || k == "PATH" ).collect(); Command::new("printenv") .stdin(Stdio::null()) .stdout(Stdio::inherit()) .env_clear() .envs(&filtered_env) .spawn() .expect("printenv failed to start");Run
设置子进程的工作目录。
平台特定的行为
如果程序路径是相对路径 (例如 "./script.sh"
),则是相对于父级工作目录还是相对于 current_dir
来解释路径。
这种情况下的行为是特定于平台且不稳定的,建议使用 canonicalize
来获取绝对程序路径。
Examples
基本用法:
use std::process::Command; Command::new("ls") .current_dir("/bin") .spawn() .expect("ls command failed to start");Run
将命令作为子进程执行,等待其完成并收集所有输出。
默认情况下,将捕获 stdout 和 stderr (并用于提供结果输出)。 Stdin 不是从父级继承的,子进程尝试从 stdin 流中进行读取的任何尝试都将导致该流立即关闭。
Examples
use std::process::Command; use std::io::{self, Write}; let output = Command::new("/bin/cat") .arg("file.txt") .output() .expect("failed to execute process"); println!("status: {}", output.status); io::stdout().write_all(&output.stdout).unwrap(); io::stderr().write_all(&output.stderr).unwrap(); assert!(output.status.success());Run
返回给 Command::new
的程序的路径。
Examples
use std::process::Command; let cmd = Command::new("echo"); assert_eq!(cmd.get_program(), "echo");Run
pub fn get_args(&self) -> CommandArgs<'_>ⓘNotable traits for CommandArgs<'a>impl<'a> Iterator for CommandArgs<'a> type Item = &'a OsStr;
[src]
pub fn get_args(&self) -> CommandArgs<'_>ⓘNotable traits for CommandArgs<'a>impl<'a> Iterator for CommandArgs<'a> type Item = &'a OsStr;
[src]impl<'a> Iterator for CommandArgs<'a> type Item = &'a OsStr;
返回将传递给程序的参数的迭代器。
这不包括程序的路径作为第一个参数;
它仅包含 Command::arg
和 Command::args
指定的参数。
Examples
use std::ffi::OsStr; use std::process::Command; let mut cmd = Command::new("echo"); cmd.arg("first").arg("second"); let args: Vec<&OsStr> = cmd.get_args().collect(); assert_eq!(args, &["first", "second"]);Run
pub fn get_envs(&self) -> CommandEnvs<'_>ⓘNotable traits for CommandEnvs<'a>impl<'a> Iterator for CommandEnvs<'a> type Item = (&'a OsStr, Option<&'a OsStr>);
[src]
pub fn get_envs(&self) -> CommandEnvs<'_>ⓘNotable traits for CommandEnvs<'a>impl<'a> Iterator for CommandEnvs<'a> type Item = (&'a OsStr, Option<&'a OsStr>);
[src]impl<'a> Iterator for CommandEnvs<'a> type Item = (&'a OsStr, Option<&'a OsStr>);
返回将在生成进程时设置的环境变量的迭代器。
每个元素都是一个元组 (&OsStr, Option<&OsStr>)
,其中第一个值为键,第二个为值,如果要显式删除环境变量,则为 None
。
这仅包括用 Command::env
,Command::envs
和 Command::env_remove
显式设置的环境变量。
它不包括子进程将继承的环境变量。
Examples
use std::ffi::OsStr; use std::process::Command; let mut cmd = Command::new("ls"); cmd.env("TERM", "dumb").env_remove("TZ"); let envs: Vec<(&OsStr, Option<&OsStr>)> = cmd.get_envs().collect(); assert_eq!(envs, &[ (OsStr::new("TERM"), Some(OsStr::new("dumb"))), (OsStr::new("TZ"), None) ]);Run
Trait Implementations
设置要传递给 CreateProcess
的 process creation flags。 Read more