![](/img/trans.png)
[英]Unable to use std::process::Command - No such file or directory
[英]Use ~ in std::process::Command
我正在尝试使用 std::process::Command 运行以编程方式安装在$HOME/.webdrivers
的 webdrivers。 我不希望用户必须将目录添加到他们的路径中,所以我希望能够使用类似
let geckodriver = Command::new("~/.webdrivers/geckodriver")
.stdout(Stdio::null())
.stderr(Stdio::null())
.spawn()?;
但这似乎不起作用。 我收到可执行文件不存在的错误。
thread 'main' panicked at 'Could not start geckodriver: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/lib.rs:49:10
什么都有帮助!
波浪号扩展是 shell(bash 等)的一个特性 - std::process::Command
使用的操作系统设施不会扩展波浪号。 所以你必须自己做。
使用std::env::var_os
获取HOME
环境变量,将其转换为Path
,然后join
您的可执行文件路径加入其中。
正如 stargateur 提到的~
由 shell 扩展bash
是一个 shell,可用于执行扩展。 而不是产卵geckodriver
直接spawn bash产卵geckodriver
let geckodriver = Command::new("bash")
.arg("-c")
.arg("~/.webdrivers/geckodriver")
.stdout(Stdio::null())
.stderr(Stdio::null())
.spawn()?;
当心:将参数打包到传递给Command::new("bash -c ~/.webdrivers/geckodriver")
的字符串中将不起作用,因为它将查找文件bash -c ~/.webdrivers/geckodriver
(带有文件名中的空格)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.