Rustはシステムプログラミング言語であり、その性能と安全性から多くの開発者に選ばれています。この記事では、Rustを使って外部のコマンドを実行する基本的な方法を紹介します。
外部コマンドの実行
外部コマンドを実行するには、std::process::Command
構造体を使用します。この構造体を使って、新しいプロセスの設定、起動、その出力の管理が可能です。
以下は、Rustで外部のecho
コマンドを実行し、その出力を表示するサンプルコードです。
use std::process::{Command, Stdio};
fn execute_process() {
// 外部の「echo」コマンドを実行
let process = match Command::new("echo")
.args(["hello world"])
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.output()
{
Err(why) => panic!("コマンドの実行でエラー: {}", why),
Ok(process) => process,
};
// 標準出力の結果を表示
println!("{}", String::from_utf8(process.stdout).unwrap());
}
このサンプルでは、まずCommand::new
メソッドを使って実行したいコマンド(この場合はecho
)のインスタンスを作成します。次に、.args()
メソッドを使ってコマンドに渡す引数を設定します。ここでは、echo
コマンドに"hello world"
という文字列を渡しています。
.stdin(Stdio::piped())
と.stdout(Stdio::piped())
メソッドを使用して、標準入出力をパイプします。これにより、Rustのプログラムからコマンドの入出力を直接制御できます。
最後に、.output()
メソッドを呼び出してコマンドを実行し、その結果を変数process
に格納します。process.stdout
には、コマンドの標準出力の内容がバイト配列として格納されています。これをString::from_utf8()
メソッドを使って文字列に変換し、println!
マクロで表示します。
スポンサーリンク
外部コマンドの戻り値の取得
外部コマンドを実行した後、その戻り値を取得する方法について解説します。
戻り値は、output()
メソッドの戻り値に含まれるstatus
フィールドからこの終了ステータスを取得できます。
以下のサンプルコードは、外部コマンドの実行結果の終了ステータスを取得し、それを基に成功か失敗かを判断するコードです。
fn execute_process() {
// 外部の「echo」コマンドを実行
let process = match Command::new("echo")
.args(["hello world"])
.output()
{
Err(why) => panic!("コマンドの実行でエラー: {}", why),
Ok(process) => process,
};
// コマンドの終了ステータスを確認
if process.status.success() {
println!("コマンドは成功しました。");
} else {
println!("コマンドは失敗しました。終了コード: {}", process.status.code().unwrap_or(-1));
}
}
この例では、output.status.success()
メソッドを使用して、コマンドが成功したかどうかを判断しています。このメソッドは、コマンドの終了ステータスが成功を示す場合にtrue
を返します。もしコマンドが失敗した場合、output.status.code()
メソッドを使用して終了コードを取得し、その値を表示しています。
終了コードは、通常、コマンドが成功した場合は0
を、失敗した場合は0
以外の値を返します(ただし、具体的な値はコマンドによって異なります)。unwrap_or(-1)
は、終了コードが何らかの理由で取得できなかった場合にデフォルト値として-1
を使用することを指定しています。
まとめ
このように、Rustで外部コマンドを実行する方法は非常に簡単で、システムレベルのタスクを扱うアプリケーションを作成する際に非常に便利です。
0 件のコメント:
コメントを投稿