Was ist der Sinn des Systems.err?
In UNIX, ich sollte schreiben Sie ein Java-Datei, die gedruckt werden "EXIT 1", um die standard-Fehler, und beenden Sie dann mit einem status von 1.
Hier ist mein Ansatz..
System.err.println("EXIT 1");
System.exit(1);
Ist es das, was ich tun soll?
Wenn ja, wie soll ich es in den Unix-shells? Wenn ich kompilieren und führen Sie es in der bash, es druckt nur "EXIT 1" (also es tut das gleiche wie System.aus.println warum sollte ich "Fehler"?). Was ist der "standard-Fehler" hier?
- Jeder Prozess kann zwei output-streams stdout und stderr. Diese können gefiltert werden, so dass, wenn Sie kümmern sich nicht um die "out-put", wollte sich aber melden Sie die Fehler, die Sie tun können, so zum Beispiel...
- "Übrigens, warum cs wichtigsten Bedürfnisse zu erfahren, UNIX?" - Warum nehmen Sie die CS, wenn Sie nicht wollen, um zu lernen CS?
- Warum ist das tagged
bash
? Dies ist eine rein Java-Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jedes laufende Programm hat diese drei Ströme:
System.in
System.out
System.err
Ihr Programm korrekt ist – es muss Druck auf stderr. Aber unter normalen Umständen, die stderr-stream geht zu der Konsole, genau wie die stdout-stream, so dass Sie optisch nicht zu unterscheiden.
Jedoch der Grund, warum Sie verwenden sollten stderr anstelle von stdout für Fehlermeldungen, ist Umleitung. Das bedeutet, dass Sie senden Sie stderr in eine Datei statt an die Konsole. Inzwischen stdout wird, bleibt davon unberührt, weil die beiden Ströme sind unabhängig.
Beispielsweise können Sie dazu in der bash, cmd, PowerShell, etc:
Nun, alle Ausgaben mit
System.err.println()
wird am Ende inerrors.txt
, währendSystem.out.println()
immer noch auf den Bildschirm. Dies kann helfen bei der Fehlerbehebung.java Program >normal-output.txt
wird, führen Sie das Programm, und sende die normale Ausgabe in eine Datei (zur späteren Verarbeitung), aber immer noch senden Sie die Fehler auf dem Bildschirm.>
leitet stdout und2>
leitet stderr. Die Umleitung sowohl zum Einsatz./program >stdout.txt 2>stderr.txt
(zwei Dateien) oder./program > combined.txt 2>&1
(eine Datei). Diese syntax funktioniert für bash und cmd.Gibt es drei Daten-streams im Zusammenhang mit fast jedem Prozess:
error_log
Datei überstderr
, während die normale log-Datei wäre e. g.access_log
.Standard-Ausgabe (
stdout
) und Standardfehler (stderr
) sind fast immer die ersten und zweiten Ausgangs-streams kommen von einem process, respectively. Dies ermöglicht es mir, etwas zu tun, wie/path/to/my/neat/program > logs/program.log 2> logs/program.err
- und Ausgabe und Fehler schön sortiert.