Как выполнить команду без использования терминала в языке программирования Rust?

  • 12 сентября 2023 г. 13:27
Ответы на вопрос 2
Чтобы выполнить команду без использования терминала в Rust, вы можете использовать структуру `std::process::Command`. Вот пример, как выполнить команду `ls -l`:

```rust
use std::process::Command;

fn main() {
    let output = Command::new("ls")
        .arg("-l")
        .output()
        .expect("Не удалось выполнить команду");

    if output.status.success() {
        let output_string = String::from_utf8_lossy(&output.stdout);
        println!("{}", output_string);
    } else {
        let error_string = String::from_utf8_lossy(&output.stderr);
        eprintln!("Ошибка выполнения команды: {}", error_string);
    }
}
```

Чтобы запустить двоичные файлы (.exe) в приложении Tauri GUI и видеть окна терминалов в режиме dev, вы можете использовать функцию `std::process::Command::spawn`. Вот пример, как запустить команду `cargo run`:

```rust
use std::process::{Command, Stdio};

fn main() {
    let output = Command::new("cargo")
        .arg("run")
        .stdout(Stdio::piped())
        .spawn()
        .expect("Не удалось запустить команду");

    // Получение вывода команды
    let output = output.wait_with_output()
        .expect("Не удалось получить вывод команды");

    if output.status.success() {
        let output_string = String::from_utf8_lossy(&output.stdout);
        println!("{}", output_string);
    } else {
        let error_string = String::from_utf8_lossy(&output.stderr);
        eprintln!("Ошибка выполнения команды: {}", error_string);
    }
}
```

Обратите внимание, что вам может потребоваться добавить необходимую зависимость в ваш файл `Cargo.toml`. Например, для использования `std::process::Command`, вы должны добавить `use std::process;` в начало файла.
Уже пробовал танцевать с `std::process::Command`? Например с `creation_flags` из `std::os::windows::process::CommandExt`. Для того чтобы запустить процесс без окна терминала, можно использовать флаг `CREATE_NO_WINDOW`. 

Немного пошаманил с твоим кодом

Похожие вопросы