Rust
コマンドライン引数
サーチ…
前書き
Rustの標準ライブラリには適切な引数パーサ(Pythonの
argparse
とは異なります)が含まれておらず、代わりにサードパーティのクレートに残すことをお勧めします。これらの例では、標準ライブラリ(粗引き数ハンドラを形成する)と、コマンドライン引数をより効果的に解析できるclap
ライブラリの両方の使用法を示します。
構文
- std :: envを使用します。 // envモジュールをインポートする
- let args = env :: args(); // Argsイテレータをargs変数に格納します。
std :: env :: args()を使用する
プログラムに渡されるコマンドライン引数には、 std::env::args()
関数を使用してアクセスできます。これはループしたりVec
集めることができるArgs
イテレータを返します。
引数を反復する
use std::env;
fn main() {
for argument in env::args() {
if argument == "--help" {
println!("You passed --help as one of the arguments!");
}
}
}
Vec
への収集
use std::env;
fn main() {
let arguments: Vec<String> = env::args().collect();
println!("{} arguments passed", arguments.len());
}
次のようにプログラムを呼び出すと、予想以上に多くの引数が得られる可能性があります。
./example
引数が渡されなかったように見えますが、最初の引数は( 通常 )実行可能ファイルの名前です。しかしこれは保証ではありませんので、取得した引数を常に検証してフィルタリングする必要があります。
拍手を使う
より大きなコマンドラインプログラムでは、 std::env::args()
は非常に面倒で管理が難しいです。 clap
を使用clap
と、コマンドラインインターフェイスを処理できます。コマンドラインインターフェイスは、引数を解析し、ヘルプを表示し、バグを回避します。
あなたはclap
で使うことができるいくつかのパターンがあり、それぞれが異なる量の柔軟性を提供します。
ビルダーパターン
これは最も冗長で柔軟な方法であるため、CLIのきめ細かな制御が必要な場合に便利です。
clap
はサブコマンドと引数を区別します 。サブコマンドは、 cargo run
やgit push
と同様に、メインプログラムの独立したサブプログラムのように動作します。彼らは、独自のコマンドラインオプションと入力を持つことができます。引数は--verbose
ような単純なフラグで、入力を受け取ることができます(例えば - --message "Hello, world"
)
extern crate clap;
use clap::{Arg, App, SubCommand};
fn main() {
let app = App::new("Foo Server")
.about("Serves foos to the world!")
.version("v0.1.0")
.author("Foo (@Example on GitHub)")
.subcommand(SubCommand::with_name("run")
.about("Runs the Foo Server")
.arg(Arg::with_name("debug")
.short("D")
.about("Sends debug foos instead of normal foos.")))
// This parses the command-line arguments for use.
let matches = app.get_matches();
// We can get the subcommand used with matches.subcommand(), which
// returns a tuple of (&str, Option<ArgMatches>) where the &str
// is the name of the subcommand, and the ArgMatches is an
// ArgMatches struct:
// https://docs.rs/clap/2.13.0/clap/struct.ArgMatches.html
if let ("run", Some(run_matches)) = app.subcommand() {
println!("Run was used!");
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow