2017-04-07 1 views
1

Warum Standardüberprüfung aws --version die erwartete Ausgabe auf dem stderr, nicht stdout druckt?Warum aws --version schreibt an stderr?

$ aws --version 2>err.log 
$ cat err.log 
aws-cli/1.11.65 Python/2.7.13 Darwin/16.5.0 botocore/1.5.28 
$ aws --version > out.log 
aws-cli/1.11.65 Python/2.7.13 Darwin/16.5.0 botocore/1.5.28 
$ cat out.log 
$ 

Es wäre sinnvoll, das Ergebnis in stdout zu schreiben, wenn der Befehl erfolgreich ausgeführt wurde. Andere Befehle wie aws ec2 describe-images oder aws ec2 describe-instances schreiben die Ausgabe korrekt in das stdout.

Überprüft auf CentOS und MacOS.

+0

Einige Erklärung hier: http://stackoverflow.com/questions/13483443/why-does-java-version-go-to-stderr – helloV

Antwort

6

Dies wird durch eine bug in argparse verursacht, die in Python 3.4 behoben wurde.

Die awscli ist in Python geschrieben und verwendet die argparse module, um die Befehlszeile zu analysieren. Es verwendet auch die action="version"feature von argparse, um den Versionsdruck zu vereinfachen. Dies druckt den Versions-String vor Python 3.4 in stderr und druckt in Python 3.4+ nach stdout.

Verwandte Themen