1. ホーム
  2. command-line

[解決済み] コマンドラインパラメーターにアクセスする方法を教えてください。

2022-04-25 07:59:25

質問

その Rustチュートリアル は、コマンドラインからパラメータを受け取る方法を説明していません。 fn main() は、すべての例において、空のパラメータリストが示されているのみです。

からコマンドラインパラメーターにアクセスする正しい方法は何ですか? main ?

解決方法は?

コマンドライン引数へのアクセスは std::env::args または std::env::args_os 関数を使用します。どちらの関数も引数に対するイテレータを返します。前者は String しかし、引数のひとつが有効なUnicodeでない場合はパニックになります。後者は OsString であり、パニックになることはない。

イテレータの最初の要素はプログラム自体の名前であり(これはすべての主要なOSの慣例です)、したがって最初の引数は実際にはイテレートされた2番目の要素であることに注意してください。

の結果を簡単に処理する方法があります。 args に変換することです。 Vec :

use std::env;

fn main() {
    let args: Vec<_> = env::args().collect();
    if args.len() > 1 {
        println!("The first argument is {}", args[1]);
    }
}

を丸ごと使用することができます。 標準イテレータツールボックス を使用して、これらの引数を操作することができます。たとえば、最初の引数だけを取り出すには、次のようにします。

use std::env;

fn main() {
    if let Some(arg1) = env::args().nth(1) {
        println!("The first argument is {}", arg1);
    }
}

のライブラリは crates.io コマンドライン引数のパース用

  • ドコプト : ヘルプメッセージを書くだけで、パースコードが生成されます。
  • 叩く : 流暢な API を使用して、解析したいオプションを記述します。docoptより高速で、よりコントロールしやすい。
  • ゲットオプト : 人気の C ライブラリの移植版。より低レベルでさらに制御可能。
  • ストラクトオプト : clap の上に構築されているため、さらに人間工学的に使いやすくなっています。