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 项目目录路径。

相关推荐
BugShare1 天前
从零重建的全功能下载管理器 Motrix Next 来了
rust
liulian09161 天前
Flutter 网络状态与内容分享库:connectivity_plus 与 share_plus 的 OpenHarmony 适配指南
网络·flutter
KKei16381 天前
Flutter for OpenHarmony 学习视频播放器技术文章
学习·flutter·华为·音视频·harmonyos
KKei16381 天前
Flutter for OpenHarmony 健身计划与运动打卡APP
flutter·华为·harmonyos
KKei16381 天前
Flutter for OpenHarmony 在线考试与自测系统APP技术文章
flutter·华为·harmonyos
Rust研习社1 天前
Ubuntu 全面拥抱 Rust 后,我意识到 Rust 社区要变了
linux·服务器·开发语言·后端·ubuntu·rust
liulian09161 天前
Flutter 依赖注入与设备信息库:get_it 与 device_info_plus 的 OpenHarmony 适配指南
flutter
fox_lht1 天前
12.3.使用生命周期使引用一直有用
开发语言·后端·rust
KKei16381 天前
Flutter for OpenHarmony学习目标追踪应用技术文章
学习·flutter·华为·harmonyos