メインコンテンツへスキップ

Rust言語でコマンドを子プロセスとして実行して出力をそのまま親プロセスの標準出力に出力する方法

··356 文字·1 分·
プログラミング Rust
著者
Admin
目次

動機
#

ダウンロードを自動化したかったので、Rustでhtmlからregexでリンクを抽出してファイルをダウンロードするためにwgetを呼んでいたが、出力がないとダウンロードが進んでいるかどうか分からないため。

wgetでは進行が表示されるので便利。

コード
#

任意のコマンドをRustのプロセス子プロセスとして実行して結果を表示する。

async fn wget()-> Result<()> {
    let mut wget = tokio::process::Command::new("wget")
        .args([
            "-P",
            "output_directory",
            "https://nisety.net/index.xml",
        ])
        .stdout(std::io::stdout()) // <-- 親プロセスのstdoutを渡す
        .stderr(std::io::stderr()) // <-- 親プロセスのstderrを渡す
        .spawn()?;

    if !wget.wait().await?.success() {
        panic!("wget failed");
    }
    Ok(())
}

tokio::process::Commandを使用しているが、std::process::Commandでも同様にできる。

ダウンロードを自動化したかったので、Rustでhtmlからregexでリンクを抽出してファイルをダウンロードするためにwgetを呼んでいる。

Related

Rustでティンクル☆くるせいだーすSBXの検証用ツールを実装した
··1666 文字·4 分
プログラミング Rust ゲーム
Rust言語でVec<Vec<T>>のT型の各要素からVec<T>を構築する方法
··304 文字·1 分
プログラミング Rust
Vec<&T>も簡単に構築できる。
自作ゲームの状態管理の実装について考える
··3281 文字·7 分
日記 プログラミング Rust ゲームプログラミング
Rust言語で自作ゲームを実装している際に悩んだのでまとめておきました。