Я пишу приложение, которое должно искать путь двоичного файла, используя which
.Я уже узнал, как запустить команду, но я не могу сохранить output.stdout
в переменной, которую я могу использовать.
use std::process::Command;
use std::str;
fn main() {
let interpreter: &str = "php72";
let binary: &str = "composer";
let mut _binary_path: &str = "";
if interpreter != "" {
let output = Command::new("which")
.arg(binary)
.output()
.expect("Execution of 'which' failed.");
_binary_path = str::from_utf8(&output.stdout).unwrap();
}
}
детская площадка
Это приводит к следующей ошибке:
error[E0597]: `output.stdout` does not live long enough
--> src/main.rs:14:40
|
14 | _binary_path = str::from_utf8(&output.stdout).unwrap();
| ^^^^^^^^^^^^^ borrowed value does not live long enough
15 | }
| - `output.stdout` dropped here while still borrowed
16 | }
| - borrowed value needs to live until here
Заимствование и ссылки все еще немного сбивают меня с толку, даже если я прочитал документы.Я понимаю, что время жизни вывода ограничено, так как оно содержится в операторе if
.Я не понимаю, почему это не позволит мне скопировать значение в область действия функции main()
.
Что происходит?Какой лучший способ прочитать стандартный вывод?