当前位置: 首页 > news >正文

【远程工具】0 std::process::Command 介绍

std::process::Command 是 Rust 标准库中用于创建和配置子进程的主要类型。它允许你启动新的进程、设置其参数和环境变量、重定向输入/输出等。

基本用法

use std::process::Command;

let output = Command::new("echo")
    .arg("Hello, world!")
    .output()
    .expect("Failed to execute command");

println!("{}", String::from_utf8_lossy(&output.stdout));

主要功能

  1. 创建命令:
  • Command::new(“可执行文件路径”) - 创建一个新的命令构建器
  1. 添加参数:
  • .arg(“参数”) - 添加单个参数

  • .args(&[“参数1”, “参数2”]) - 添加多个参数

  1. 执行命令:
  • .output() - 执行命令并等待完成,收集所有输出

  • .status() - 执行命令并等待完成,返回退出状态

  • .spawn() - 启动命令并返回子进程句柄,不等待完成

  1. 环境配置:
  • .env(“KEY”, “value”) - 设置环境变量

  • .env_remove(“KEY”) - 移除环境变量

  • .env_clear() - 清除所有环境变量

  1. 工作目录:
  • .current_dir(“路径”) - 设置子进程的工作目录
  1. 输入/输出重定向:
  • .stdin(Stdio::piped()) - 重定向标准输入

  • .stdout(Stdio::piped()) - 重定向标准输出

  • .stderr(Stdio::piped()) - 重定向标准错误

示例

执行命令并获取输出
let output = Command::new("ls")
    .arg("-l")
    .arg("-a")
    .output()
    .expect("ls command failed to start");
管道输入
use std::process::{Command, Stdio};

let mut child = Command::new("grep")
    .arg("hello")
    .stdin(Stdio::piped())
    .stdout(Stdio::piped())
    .spawn()
    .expect("failed to spawn child");

let mut stdin = child.stdin.take().expect("failed to get stdin");
std::thread::spawn(move || {
    stdin.write_all("hello world\ngoodbye\n".as_bytes()).expect("failed to write to stdin");
});

let output = child.wait_with_output().expect("failed to wait on child");
错误处理
match Command::new("nonexistent_command").output() {
    Ok(output) => {
        // 处理成功情况
    }
    Err(e) => {
        eprintln!("执行命令失败: {}", e);
    }
}
安全注意事项
  • Command 会继承父进程的环境变量,这可能带来安全风险

  • 构建命令时,参数应该来自可信源或经过适当转义

  • 在 Windows 上,参数传递的行为可能与 Unix 系统不同

Command 提供了强大而灵活的子进程管理功能,是 Rust 中与系统交互的重要工具之一。

相关文章:

  • 一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel
  • 30天学Java第九天——线程
  • 计算机网络- 传输层安全性
  • BUG:Cannot find implementation for xxx. database. xxx. xxx_Impl does not exist
  • 2024第十五届蓝桥杯大赛软件赛省赛Java大学B组 报数游戏 类斐波那契循环数 分布式队列 食堂 最优分组 星际旅行 LITS游戏 拼十字
  • 【力扣hot100题】(089)最长有效括号
  • 通用 Web 项目安全加固 Checklist(语言无关通用模板)
  • 【2025年认证杯数学中国数学建模网络挑战赛】A题 解题建模过程与模型代码(基于matlab)
  • ch07 部分题目思路
  • 量子指纹识别
  • 【数据结构】排序
  • golang通过STMP协议发送邮件功能详细操作
  • 化工行业电气智能化管理系统解决方案
  • CVE-2025-31486 Vite开发服务器任意文件读取漏洞复现
  • Pytorch实现基于FlowS-Unet的遥感图像建筑物变化检测方法
  • wireshark抓包,镜像端口,观察端口
  • protobuf的应用
  • 第三节:React 基础篇-React组件通信方案
  • JAVA Web_定义Servlet_1 欢迎考生
  • 客户案例 | 日事清×初心家居:多部门协作实现新品上架自动化
  • 有什么做海报网站/建网站平台
  • 网站漏洞解决/成都品牌推广
  • 做直播的视频在线观看网站/产品经理培训哪个机构好
  • 住房和城乡建设部网站打不开/yahoo引擎入口
  • 建设自己的网站步骤/整合网络营销公司
  • 个人网站这么做/南京百度seo代理