184 votes

Comment accéder aux paramètres de ligne de commande dans la rouille?

La rouille tutoriel n'explique pas comment le prendre paramètres de la ligne de commande. fn main() n'est affiché avec un vide de la liste des paramètres dans tous les exemples.

Alors, quelle est la bonne façon d'accéder aux paramètres de ligne de commande à partir d' main?

207voto

barjak Points 4682

Comme pour la Rouille de 0,9 (merci rofrol le modifier) :

Vous pouvez accéder aux arguments de ligne de commande en utilisant l' std::os::args fonction.

use std::os;

fn main() {
  let args = os::args();
  println!("The first argument is {}", args[1]);
}

Dans https://github.com/mozilla/rust/tree/master/src/test/bench vous trouverez de nombreux exemples de travail, c'est à dire regarder sudoku.rs.

29voto

BurntSushi5 Points 1229

Docopt est également disponible pour la Rouille, ce qui génère un analyseur syntaxique pour vous à partir de l'utilisation de la chaîne. Comme un bonus dans la Rouille, une macro peut être utilisé pour générer automatiquement la structure et de faire de ce type de base de décodage:

docopt!(Args, "
Usage: cp [-a] SOURCE DEST
       cp [-a] SOURCE... DIR

Options:
    -a, --archive  Copy everything.
")

Et vous pouvez obtenir le args avec:

let args: Args = Args::docopt().decode().unwrap_or_else(|e| e.exit());

Le fichier README et de la documentation ont beaucoup d'exemples complets.

12voto

Tobu Points 10101

la rouille a getopt de style cli argument de l'analyse syntaxique est dans le getopts module.

4voto

Nick Points 45

À partir de la version 0.8/0.9, le chemin d'accès correct à la fonction args() serait ::std::os::args, c'est à dire:

fn main() {
  let args: ~[~str] = ::std::os::args();
  println(args[0]);
}

Il semble que la Rouille est encore assez volatile pour le moment avec la même norme IO, donc cela peut devenir obsolète assez rapidement.

2voto

Calvin Points 261

ce que @barjak dit œuvres pour cordes, mais si vous avez besoin de l'argument d'un nombre (dans ce cas, un uint) vous avez besoin de convertir comme ceci:

fn main() {
    let arg : ~[~str] = os::args();
    match uint::from_str(arg[1]){
         Some(x)=>io::println(fmt!("%u",someFunction(x))),
         None=>io::println("I need a real number")
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X