Comment faire pour envoyer la sortie stderr?
On utilise cette fonction pour envoyer la sortie vers stdout:
println!("some output")
Je pense qu'il n'y a pas de macro pour faire la même chose pour stderr.
Vous devez vous connecter pour publier un commentaire.
Après La Rouille 1.19
Comme de la Rouille 1.19, vous pouvez utiliser le
eprint
eteprintln
macros:Cela a été proposé à l'origine dans RFC 1896.
Avant De Rouille 1.19
Vous pouvez voir la la mise en œuvre de
println!
de plonger dans exactement comment cela fonctionne, mais c'était un peu écrasante quand je l'ai lu.Vous pouvez mettre des trucs sur la sortie stderr, utilisent des macros si:
Cela vous donnera une
unused result which must be used
mais attention, comme l'impression de IO peut échouer (ce n'est pas quelque chose que nous avons l'habitude de penser lors de l'impression!). Nous pouvons voir que les méthodes existantes simplement de panique dans ce cas, afin que nous puissions mettre à jour notre code pour faire la même chose:C'est un peu beaucoup, donc laisser envelopper dans un macro:
println_stderr!("Hello {}!", name)
vswriteln!(&mut std::stdio::stderr(), "Hello {}!", name)
, à la fois, qui font à peu près la même chose?writeln!(...).unwrap();
à gérer l'échec possible de la façon la plus simple.print!
etprintln!
sont des méthodes pratiques pour l'écriture sur la sortie standard. Il y a d'autres macros avec les mêmes fonctionnalités de mise en forme disponibles pour différentes tâches:écrire!
etwriteln!
pour écrire une chaîne formatée pour un&mut Auteur
format!
à générer une formatéString
À écrire dans le flux d'erreur standard, vous pouvez utiliser, par exemple,
writeln!
comme ceci:C'est fait:
Vous pouvez le tester en envoyant le programme de sortie de
/dev/null
pour s'assurer qu'il fonctionne (j'ignore l'avertissement):De même, on peut effectuer les opérations suivantes pour stdout:
Je pense que cela signifie
println!
est juste une commodité: il est plus court, et il permet également une mise en forme. Comme un exemple de ce dernier, le message suivant s'affiche0x400
:Tout en ne répondant pas à la question précise, c'est peut-être de l'intérêt qu'il y a un
log
caisse qui spécifie une interface pour nivelé la journalisation que d'autres caisses en bois (par exempleenv_logger
) peut répondre.La sortie de cet enregistrement sera envoyé à
stderr
, et il y a d'autres avantages pour les utilisateurs, notamment en spécifiant le niveau de journal.C'est de cette façon en utilisant par exemple un enregistreur pourrait ressembler à:
(Exemple adapté de http://burntsushi.net/rustdoc/env_logger/index.html#example)
Objectif
Notes
Autres réponses générer un solde non utilisé de l'importation d'avertissement avec la dernière nightly, voici donc un moderne macro qui Fonctionne TM.
Code
use
etmatch
dans un autre bloc, ça fonctionne pour moi. Donc($($arg:tt)*) => ({ use ... })