技术洞察

rust项目初始化与执行shell命令

2023-09-06 13:51:55 发布  
2023-11-21 09:30:17 更新

1. 管理rust项目

1.1 创建项目

cargo new name

1.2 编译项目

cargo build

1.3 交叉编译

编译至linux运行环境:

cargo build --release --target=x86_64-unknown-linux-musl

1.4 编译运行

编译并运行项目:

cargo run

1.5 检查项目

检查项目是否能通过编译,不产生编译后的可执行文件:

cargo check

2. Rust执行shell命令

使用rust的标准库:std::process::Command

地址:https://rustwiki.org/zh-CN/std/process/struct.Command.html

2.1 获取命令执行结果

获取命令执行结果的4种方法,完整代码:

use std::process::Command;

fn main() {
    let shell = CMD { cmd: String::from("ping www.baidu.com -c 2") };
    // 示例1:获取命令执行结果bool
    if shell.command_bool() {
        println!("命令执行成功");
    }
    // 示例2:获取命令输出和执行结果bool
    let (output, err) = shell.command();
    if !err {
        println!("命令执行失败:{}", output);
    }
    // 示例3,只获取命令的输出,不管成功和失败
    let output = shell.command_string();
    println!("命令执行结果:{}", output);
}

struct CMD {
    cmd: String, // 完整的shell命令
}

impl CMD {
    // 执行shell命令,获取执行结果与输出
    fn command(&self) -> (String, bool) {
        let shell = Command::new("sh").arg("-c").arg(&self.cmd).output().expect("命令执行失败");
        if !shell.status.success() {
            let stderr = format!("{}", String::from_utf8_lossy(&shell.stderr));
            return (stderr, false);
        }
        let stdout = format!("{}", String::from_utf8_lossy(&shell.stdout));
        return (stdout, true);
    }

    // 执行shell命令,获取执行输出
    fn command_string(&self) -> String {
        let shell = Command::new("sh").arg("-c").arg(&self.cmd).output().expect("命令执行失败");
        if !shell.status.success() {
            let stderr = format!("{}", String::from_utf8_lossy(&shell.stderr));
            return stderr;
        }
        let stdout = format!("{}", String::from_utf8_lossy(&shell.stdout));
        return stdout;
    }

    // 执行shell命令,只获取执行结果bool值
    fn command_bool(&self) -> bool {
        let shell = Command::new("sh").arg("-c").arg(&self.cmd).output().expect("命令执行失败");
        return shell.status.success();
    }

    // 执行shell命令,获取实时输出
    #[allow(dead_code)]
    fn command_output(&self) {
        println!("待完成")
    }
}


文章信息
作者
福道清音
发布时间
2023-09-06 13:51:55
分类
技术洞察
快速操作
版权与转载说明
文章标题 rust项目初始化与执行shell命令
作者 福道清音
发布时间 2023-09-06 13:51:55
原文链接 正在获取...

本文发布于 upxos.com,著作权归 upX / upxos.com 所有。欢迎非商业场景转载或引用,请保留原文链接并注明出处;商业使用、改编发布或批量转载,请先联系 upX 获得书面授权。