Sto creando uno script che gestisce un set predefinito di dati, che viene esportato in un file. Voglio far apparire un avvertimento quando un dato (che è sempre "normale" in ogni set a cui ho avuto accesso) è diverso affermando che questo valore non è gestito (poiché non so come influisce sui dati). Dovrei inviare questo avviso a stderr o stdout?Devo emettere avvisi su STDERR o STDOUT?
risposta
Se ho salvato l'output di questo script (vale a dire solo stdout) in modo che possa essere elaborato in un secondo momento, tale avviso interferirebbe con il modo in cui l'output viene analizzato? Inoltre, se l'output è collegato a un altro processo, l'avviso dovrebbe apparire sul terminale, quindi l'utente lo vedrà immediatamente.
Per questi motivi, in generale, si generano avvisi su stderr.
La vera domanda è: se qualcuno dovesse reindirizzare l'output del tuo script in un file, vorresti che l'avviso fosse inserito nel file o diretto all'utente?
Se si prevede che l'utente intraprenda un'azione a seguito dell'avviso, dovrebbe passare a STDERR. Se è probabile che uno script downstream venga attivato dall'avviso, dovrebbe passare a STDERR.
L'avviso dovrebbe andare a stderr.
Oltre ai punti presentati da altri (che causano errori di analisi per i processi downstream e che nascondono l'errore dall'utente alla console), c'è un problema di flessibilità.
Se l'utente non desidera che l'avviso di stderr passi a un processo downstream che sta analizzando lo stdout, non deve fare nulla di speciale.
your_script | downstream_process
Se l'utente vuole l'avvertimento da stderr di andare in un processo a valle che analizzare stdout e stderr, l'utente può utilizzare 2> & 1 per reindirizzare stderr in stdout.
your_script 2>&1 | downstream_process
Se voi di uscita sia le avvertenze e le eventuali dati normali a stdout, l'utente non ha buon modo di separare gli avvertimenti dei dati senza l'analisi di tutto. Quindi inviare gli avvertimenti a stderr dà allo script anche maggiore flessibilità.
- 1. LLVM stdin/stdout/stderr
- 2. Reindirizzamento stdout/stderr su più file
- 3. filtri vim e stdout/stderr
- 4. Duplicare lo stdout allo stderr
- 5. Leggere STDOUT e STDERR dal sottoprocesso continuamente
- 6. Apache Spark Stderr e Stdout
- 7. paramiko combina stdout e stderr
- 8. Piping popen stderr e stdout
- 9. Mantenimento della registrazione e/o stdout/stderr in Python Daemon
- 10. Acquisizione di stdout/stderr con NDK
- 11. 'app --help' dovrebbe andare a stdout o stderr?
- 12. È stdin, stdout, stderr buffered o unbuffered in Lua?
- 13. Reindirizzamento stdout + stderr su un servizio Windows C#
- 14. Haskell: System.Process unire stdout e stderr
- 15. Perché STDERR viene reindirizzato a STDOUT
- 16. Come reindirizzare il processo figlio stdout/stderr nel processo principale stdout/stderr in Java?
- 17. Invia JNI C stderr/stdout tramite log4j
- 18. Come reindirizzare stdout, stderr indietro su/dev/tty
- 19. Come acquisire stdout/stderr con googletest?
- 20. Elimina stampa stdout/stderr dalle funzioni Python
- 21. È corretto stampare su stdout o stderr nelle migrazioni di dati Django? Se é cosi, come?
- 22. Ci sono delle regole che mi dicono quale forma di STDOUT/STDERR/SDTIN devo scegliere?
- 23. Perché java.util.logging.Logger stampa su stderr?
- 24. Perché il reindirizzamento di stderr/stderr su Android non funziona?
- 25. Cron invia email con STDERR ma NON STDOUT?
- 26. Quando utilizzare $ stderr vs STDERR in Ruby?
- 27. Come avviare correttamente un processo e inoltrare stdin/stdout/stderr?
- 28. Cattura stdout e stderr da SAS in Windows?
- 29. Quando si utilizza subprocess.Popen(), stderr e stdout non hanno output
- 30. Utilizzo di stdout/stderr/stdin streams dietro l'FFI di haskell
Quindi dovrebbe andare a stderr a prescindere? O intendevi che uno dei due riferimenti a STDERR fosse STDOUT? –
Intendevo STDERR su entrambi. Sono due casi in cui devi praticamente inviarlo a stderr. L'unica volta che riesco a pensare di volerlo andare in stdout è se l'output dello script è per il consumo umano (forse manderai l'output a qualcuno per dargli un'occhiata), e potresti desiderare di seguire gli avvertimenti l'output senza dover ricordare di reindirizzare lo stderr. – Martin