6
votes

Pourquoi Python -v écrit-il au flux d'erreur?

J'écris un script pour inspecter la version de Python sur mon système et j'ai remarqué que python -v écrit sur le flux d'erreur, tandis que python -h pour L'instance utilise la sortie standard. Y a-t-il une bonne raison pour ce comportement?


0 commentaires

4 Réponses :


2
votes

-h utilisé pour imprimer à stardr comme vous voyez ici à partir de MAIN.C

usage(int exitcode, char* program)
{
FILE *f = exitcode ? stderr : stdout;

fprintf(f, usage_line, program);
if (exitcode)
    fprintf(f, "Try `python -h' for more information.\n");
else {
    fputs(usage_1, f);
    fputs(usage_2, f);
    fputs(usage_3, f);
    fprintf(f, usage_4, DELIM);
    fprintf(f, usage_5, DELIM, PYTHONHOMEHELP);
}


0 commentaires

1
votes

Probablement sans bonne raison, certains creusés ont révélé le Le correctif Ajout des options, mais je peux trouver des références à la raison pour laquelle les différents flux sont utilisés dans la discussion sur le patch.


0 commentaires

2
votes

Pourquoi?

Parce que ce n'est pas la sortie réelle de votre script actuel.

C'est l'utilisation ordinaire de longue date, standard, courante, typique et ordinaire pour l'erreur standard: tout ne génère pas de votre script.


0 commentaires

3
votes

L'option -h également utilisée pour imprimer à starr car elle ne fait pas partie de la sortie de votre programme, c'est-à-dire que la sortie n'est pas produite par votre script Python, mais par l'interprète Python lui-même.

Quant pourquoi ils ont changé le -h pour utiliser stdout? Essayez de taper python -h avec la fenêtre de votre borne définie sur les 24 lignes standard. Il fait défiler l'écran.

Maintenant, la plupart des gens réagiraient en essayant python -h | moins mais qui ne fonctionne que si vous envoyez la sortie de -h au stdout au lieu de STDOUT. Donc, il y avait une bonne raison de la fabrication -h aller to stdout, mais pas de bonne raison de changer -v.


0 commentaires