動機 #
ダウンロードを自動化したかったので、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を呼んでいる。