Rustのように、lsまたはfuserRustでシステムコマンドを呼び出す方法はありますか?その出力をキャプチャするのはどうですか?
回答:
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::processrustc 1.19.0のようになりました。
                    
output関数はプロセスの完了後にVecを返すと思います。したがって、のようなものを実行する場合に備えてCommand("ping google.com")。終了しないので、このコマンドを出力することは可能ですか?ログを印刷したいのですが。提案してください。