Rustのように、ls
またはfuser
Rustでシステムコマンドを呼び出す方法はありますか?その出力をキャプチャするのはどうですか?
回答:
std::process::Command
それを可能にします。
子プロセスを生成し、マシン上で任意のコマンドを実行するには、複数の方法があります。
ドキュメントからの1つの簡単な例:
use std::process::Command;
Command::new("ls")
.arg("-l")
.arg("-a")
.spawn()
.expect("ls command failed to start");
ドキュメントからの非常に明確な例:
use std::process::Command;
let output = Command::new("/bin/cat")
.arg("file.txt")
.output()
.expect("failed to execute process");
println!("status: {}", output.status);
println!("stdout: {}", String::from_utf8_lossy(&output.stdout));
println!("stderr: {}", String::from_utf8_lossy(&output.stderr));
assert!(output.status.success());
それは確かに可能です!関連するモジュールはstd::run
です。
let mut options = std::run::ProcessOptions::new();
let process = std::run::Process::new("ls", &[your, arguments], options);
ProcessOptions
'標準のファイル記述子はデフォルトでNone
(新しいパイプを作成する)であるため、process.output()
(たとえば)を使用してその出力から読み取ることができます。
あなたはそれを行うの後にコマンドを実行し、そのすべての出力を取得したい場合は、ありますwait_with_output
、そのために。
Process::new
ちなみに、昨日の時点で、のOption<Process>
代わりにを返しますProcess
。
std::io::process
。代わりに、を参照してください(以下の回答)。
std::process
rustc 1.19.0のようになりました。
output
関数はプロセスの完了後にVecを返すと思います。したがって、のようなものを実行する場合に備えてCommand("ping google.com")
。終了しないので、このコマンドを出力することは可能ですか?ログを印刷したいのですが。提案してください。