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;
RunCommand
可以重用以生成多个进程。
构建器方法无需立即使进程 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");
RunImplementations
使用以下默认配置创建一个新的 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");
Run1.57.0[src]pub fn get_args(&self) -> CommandArgs<'_>ⓘNotable traits for CommandArgs<'a>impl<'a> Iterator for CommandArgs<'a> type Item = &'a OsStr;
pub fn get_args(&self) -> CommandArgs<'_>ⓘNotable traits for CommandArgs<'a>impl<'a> Iterator for CommandArgs<'a> type Item = &'a OsStr;
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"]);
Run1.57.0[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>);
pub fn get_envs(&self) -> CommandEnvs<'_>ⓘNotable traits for CommandEnvs<'a>impl<'a> Iterator for CommandEnvs<'a> type Item = (&'a OsStr, Option<&'a OsStr>);
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