tauri2项目中自定义执行cmd命令界面卡死以及中文出错问题

为了满足客户的需求,需要在前端中可以执行任意的cmd命令,然后在rust端执行,之前已经写过这个逻辑,但是今天发现出现了两个问题:1.cmd执行时间长的话,程序就会卡死,2.执行命令中包含中文的话,就会执行失败,今天就来讲一个该怎么解决这个两个问题

1.时间长程序卡死

要解决这个问题,就需要让cmd命令进行异步操作,改善后的程序如下,传递一个cmd命令字符串就可以了

rust 复制代码
#[tauri::command]
pub async fn run_command(command: String) -> Result<String, String> {
    let output = if cfg!(target_os = "windows") {
        tokio::process::Command::new("cmd")
            .args(&["/C", &command])
            .output()
            .await
            .map_err(|e| e.to_string())?
    } else {
        tokio::process::Command::new("sh")
            .arg("-c")
            .arg(&command)
            .output()
            .await
            .map_err(|e| e.to_string())?
    };

    if output.status.success() {
        Ok(String::from_utf8_lossy(&output.stdout).to_string())
    } else {
        Err(String::from_utf8_lossy(&output.stderr).to_string())
    }
}

2.中文报错问题

解决中文报错问题,可以使用双引号将中文包括起来,因为手动在cmd中操作,你会发现中文也是被双引号包括的,所以就模拟这个操作即可

如果是exe的路径中有中文呢?这里是没有双引号的

所以程序里也没问题:

可以执行成功,并会得到结果

相关推荐
馒头不想说话11 分钟前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥2 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马2 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头3 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen3 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健3 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒3 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端
OpsEye3 小时前
企业大模型压测,需要重点关注哪些指标?
javascript·ai编程
LuHang4 小时前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
用户360055579004 小时前
Kestrel_VLLM - 27 · 寄存器常驻与融合发射:两次「少发一次」
前端