【发布时间】:2021-05-01 09:34:31
【问题描述】:
Command::new(format!("git -C {} status", dir.as_path().display().to_string()));
我正在使用上面的代码converts my PathBuf variable to a String,但这是最好的方法吗?有没有不用转换就可以使用PathBuf变量的方法?
【问题讨论】:
Command::new(format!("git -C {} status", dir.as_path().display().to_string()));
我正在使用上面的代码converts my PathBuf variable to a String,但这是最好的方法吗?有没有不用转换就可以使用PathBuf变量的方法?
【问题讨论】:
您的示例运行可执行文件git -C $dir status,不向该可执行文件传递任何参数。只要你spawn(),它就会出错,因为你的PATH中没有这样一个奇怪的文件。
改为运行 git 传递您的参数:
Command::new("git").arg("-C").arg(dir).arg("status")
这也使问题变得毫无意义,因为不需要转换。
【讨论】:
我假设您担心PathBuf 到String 的转换在PathBuf 不是有效的UTF-8 的情况下。如果是这种情况,我会将该行重构为它自己的函数并手动构造一个OsString 来创建Command:
use std::ffi::OsString;
use std::path::PathBuf;
use std::process::Command;
fn git_status(dir: PathBuf) -> Command {
let mut os_string: OsString = "git -C ".into();
os_string.push(&dir);
os_string.push(" status");
Command::new(os_string)
}
【讨论】: