flutter使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令,就需要知道对应的平台是windows还是linux,如果是windows就需要调用cmd命令,如果是linux平台,就需要调用sh命令,所以可以通过cfg!实现不同平台的判断,然后调用不同的脚本。

rust 复制代码
use std::process::Command;


pub fn run_cmd() {
    // choice a platform use cfg command
    let flutter_doctor = "pwd";
    let out_put = if cfg!(target_os = "windows") {
        Command::new("cmd").arg("/c").arg(flutter_doctor).output().expect("cmd run error")
    } else {
        Command::new("sh").arg("-c").arg(flutter_doctor).output().expect("shell exec error!")
    };
    let output_str = String::from_utf8_lossy(&out_put.stdout);
    println!("{}", output_str);
}

此时运行上述代码,会打印出当前运行命令所在的文件夹:

可以看到运行的文件夹跑到src-build里面了,这个时候运行flutter doctor肯定是不生效的,当然运行在这个文件夹也是合情合理的,但是我们需要让他跳到外面一层,然后再运行flutter doctor才有效果,所以需要在运行flutter doctor之前,切换文件夹:

rust 复制代码
use std::process::Command;
use std::io::{self, Write};

fn main() {
    // 指定要运行命令的目录
    let flutter_project_dir = "path/to/flutter/project";

    let output = if cfg!(target_os = "windows") {
        // Windows 平台
        Command::new("cmd")
            .args(&["/C", "cd", &flutter_project_dir, "&&", "flutter", "doctor"])
            .output()
            .expect("Failed to execute command")
    } else {
        // macOS 平台
        Command::new("sh")
            .args(&["-c", &format!("cd {} && flutter doctor", &flutter_project_dir)])
            .output()
            .expect("Failed to execute command")
    };

    // 打印命令输出
    io::stdout().write_all(&output.stdout).unwrap();
    io::stderr().write_all(&output.stderr).unwrap();
}

在这个示例中,我们首先指定了要运行命令的目录 flutter_project_dir。然后,我们使用 Command::new("cmd") 来启动 Windows 的命令行解释器,并通过参数 /c 来告诉它执行完后退出。接着,我们使用 cd 命令切换到指定目录,然后执行 flutter doctor 命令。

最后,我们通过 output() 方法获取命令的输出,并将其打印出来。请确保将 path/to/flutter/project 替换为实际的 Flutter 项目目录路径。

相关推荐
MonkeyKing715514 分钟前
Flutter列表性能极致优化:从卡顿到丝滑
flutter
恋猫de小郭32 分钟前
实用性 Max ,新 Flutter & Dart Agent Skills 深度解读
android·前端·flutter
kyriewen111 小时前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
开发语言·前端·javascript·设计模式·rust·ecmascript·powerpoint
小杍随笔1 小时前
【Tauri 2 + Rust 配置 WebView2 缓存数据存储到安装目录】
开发语言·后端·rust·tauri
代码羊羊3 小时前
Rust 迭代器完全通俗易懂指南(零基础全覆盖)
java·开发语言·rust
iDao技术魔方13 小时前
DeepSeek TUI:原生 Rust 打造的终端 AI 编码 Agent
开发语言·人工智能·rust
古城小栈13 小时前
封神!Rust 出品 HTTP 压测神器 cargo-whero,轻量碾压 JMeter、wrk,新手也能秒上手
jmeter·http·rust
kyriewen14 小时前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
前端·rust·webassembly
kyriewen1114 小时前
你等的Babel编译,够喝三杯咖啡了——用Rust重写的SWC,只需眨个眼
开发语言·前端·javascript·后端·性能优化·rust·前端框架
techdashen18 小时前
用 Rust 写生产级服务要踩多少坑——Cloudflare 把答案做成了一个开源库
开发语言·rust·开源