Shopping cart

0

Cart

  • 0 item

Nessun prodotto nel carrello.

All categories
 Corso Gratuito di Programmazione Rust Lezione 045 – Scrivere i messaggi di errore nell’Errore Standard invece che nell’Uscita Standard

SE VUOI PRENDERE LA CERTIFICAZIONE PER QUESTO CORSO CLICCA QUI

Corso su Gestione degli Errori e Stampa su Standard Error

Scrivere Messaggi di Errore su Standard Error invece di Standard Output

Attualmente, stiamo scrivendo tutti i nostri output sul terminale usando il macro println!. Nella maggior parte dei terminali, ci sono due tipi di output: standard output (stdout) per informazioni generali e standard error (stderr) per i messaggi di errore. Questa distinzione consente agli utenti di scegliere di indirizzare l’output di successo di un programma su un file ma di stampare comunque i messaggi di errore sullo schermo.

Il macro println! è in grado solo di stampare su standard output, quindi dobbiamo usare qualcos’altro per stampare su standard error.

Verifica di Dove Vengono Scritti gli Errori

Prima, osserviamo come il contenuto stampato da minigrep viene attualmente scritto su standard output, inclusi eventuali messaggi di errore che vogliamo scrivere su standard error invece. Lo faremo reindirizzando il flusso di output standard su un file causando intenzionalmente un errore. Non reindirizzeremo il flusso di errori standard, quindi qualsiasi contenuto inviato a standard error continuerà a essere visualizzato sullo schermo.

I programmi da riga di comando devono inviare i messaggi di errore al flusso di errori standard in modo che possiamo comunque vedere i messaggi di errore sullo schermo anche se reindirizziamo il flusso di output standard su un file. Il nostro programma attualmente non si comporta bene: stiamo per vedere che salva l’output del messaggio di errore su un file invece!

Per dimostrare questo comportamento, eseguiremo il programma con > e il percorso del file, output.txt, a cui vogliamo reindirizzare il flusso di output standard. Non passeremo alcun argomento, il che dovrebbe causare un errore:

bash

$ cargo run > output.txt

La sintassi > dice alla shell di scrivere il contenuto dello standard output su output.txt invece dello schermo. Non abbiamo visto il messaggio di errore che ci aspettavamo stampato sullo schermo, quindi significa che deve essere finito nel file. Ecco cosa contiene output.txt:

plaintext

Problem parsing arguments: not enough arguments

Sì, il nostro messaggio di errore viene stampato su standard output. È molto più utile che i messaggi di errore come questo vengano stampati su standard error in modo che solo i dati di un’esecuzione riuscita finiscano nel file. Cambieremo questo.

Stampa degli Errori su Standard Error

Utilizzeremo il codice nel Listing 12-24 per cambiare il modo in cui vengono stampati i messaggi di errore. A causa del refactoring che abbiamo fatto in precedenza in questo capitolo, tutto il codice che stampa i messaggi di errore è in una sola funzione, main. La libreria standard fornisce il macro eprintln! che stampa sul flusso di errore standard, quindi cambieremo i due luoghi in cui stavamo chiamando println! per stampare gli errori usando eprintln! invece.

rust

fn main() {
let args: Vec<String> = env::args().collect();
let config = Config::build(&args).unwrap_or_else(|err| {
eprintln!("Problem parsing arguments: {err}");
process::exit(1);
});

if let Err(e) = minigrep::run(config) {
eprintln!("Application error: {e}");
process::exit(1);
}
}

Esecuzione del Programma e Visualizzazione degli Errori

Eseguiamo ora nuovamente il programma allo stesso modo, senza argomenti e reindirizzando lo standard output con >:

bash

$ cargo run > output.txt

Ora vediamo l’errore sullo schermo e output.txt non contiene nulla, che è il comportamento che ci aspettiamo dei programmi da riga di comando.

Eseguiamo ora nuovamente il programma con argomenti che non causano un errore ma reindirizzano comunque lo standard output su un file, come segue:

bash

$ cargo run -- to poem.txt > output.txt

Non vedremo alcun output sul terminale, e output.txt conterrà i nostri risultati.

Questo dimostra che ora stiamo usando standard output per l’output di successo e standard error per l’output di errore come appropriato.

Riassunto

Questo capitolo ha ricapitolato alcuni dei concetti principali che hai imparato finora e ha coperto come eseguire operazioni di I/O comuni in Rust. Utilizzando gli argomenti da riga di comando, i file, le variabili d’ambiente e il macro eprintln! per stampare gli errori, sei ora pronto per scrivere applicazioni da riga di comando. Combinato con i concetti dei capitoli precedenti, il tuo codice sarà ben organizzato, archivierà i dati in modo efficace nelle strutture dati appropriate, gestirà gli errori in modo gradevole e sarà ben testato.

Successivamente, esploreremo alcune funzionalità di Rust che sono state influenzate dai linguaggi funzionali: chiusure e iteratori.

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *