std::process::Command执行无报错但无任何反应的问题
问题分析与修复
你的代码核心问题是cmd命令的参数用法错误:/C参数仅需使用一次,作用是告诉cmd执行后续的命令字符串后退出。你多次添加/C会导致cmd无法正确解析命令序列,自然不会产生任何有效执行结果。
修复方案一:正确组合cmd命令字符串
将切换目录与执行steamcmd的命令合并为一个字符串,通过单次/C参数传递给cmd:
use std::process::Command; let steamcmd_dir = String::from("C:/Users/user/Desktop/steamcmd"); // 用/d保证跨盘符目录切换生效,&&确保cd成功后再执行steamcmd let cmd_str = format!("cd /d {} && steamcmd +login anonymous", steamcmd_dir); let output = Command::new("cmd") .arg("/C") .arg(cmd_str) .output() .unwrap(); // 打印输出用于调试,排查执行中的问题 println!("标准输出: {}", String::from_utf8_lossy(&output.stdout)); println!("错误输出: {}", String::from_utf8_lossy(&output.stderr));
修复方案二:直接设置进程工作目录(推荐)
无需借助cmd切换目录,直接用Rust Command的current_dir方法指定steamcmd的工作目录,更简洁且不易出错:
use std::process::Command; let steamcmd_dir = String::from("C:/Users/user/Desktop/steamcmd"); let output = Command::new("steamcmd") .current_dir(steamcmd_dir) .arg("+login") .arg("anonymous") .output() .unwrap(); // 打印输出用于调试 println!("标准输出: {}", String::from_utf8_lossy(&output.stdout)); println!("错误输出: {}", String::from_utf8_lossy(&output.stderr));
额外提示
调用output()后打印标准输出和错误输出,能帮你快速定位问题——比如steamcmd路径错误、权限不足等情况,都会在错误输出中给出提示。
内容的提问来源于stack exchange,提问作者Lun
相关产品推荐
相关产品推荐

