2009-11-04 4 views

Respuesta

3

La opción -h también se utiliza para imprimir en stderr porque no forma parte de la salida de su programa, es decir, el resultado no es producido por su secuencia de comandos de Python sino por el propio intérprete de Python.

¿En cuanto a por qué cambiaron la -h para usar stdout? Intente escribir python -h con su ventana de terminal establecida en las 24 líneas estándar. Se desplaza fuera de la pantalla.

Ahora la mayoría de la gente reaccionaría intentando python -h |less pero eso solo funciona si envía la salida de -h a stdout en lugar de stderr. Entonces, había una buena razón para hacer que -h vaya a stdout, pero no hay una buena razón para cambiar -V.

2

-h utiliza para imprimir en stderr también, ya que se ve aquí desde main.c

usage(int exitcode, char* program) 
{ 
fprintf(stderr, usage_line, program); 
fprintf(stderr, usage_top); 
fprintf(stderr, usage_mid); 
fprintf(stderr, usage_bot, DELIM, DELIM, PYTHONHOMEHELP); 
exit(exitcode); 
/*NOTREACHED*/ 
} 

... 

if (help) 
    usage(0, argv[0]); 

if (version) { 
    fprintf(stderr, "Python %s\n", PY_VERSION); 
    exit(0); 

El main.c actual ha cambiado el uso del modo en que se define

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); 
} 

Así sintaxis utiliza stdout para -h y stderr para -Q.

No puedo ver ninguna evidencia de buena razón de una manera de la otra. Posiblemente no se puede cambiar ahora sin romper la compatibilidad con versiones anteriores

1

Probablemente por una buena razón, algunas búsquedas revelaron the patch agregando las opciones, pero puedo encontrar cualquier referencia a por qué se usan las diferentes secuencias en la discusión sobre el parche.

2

¿Por qué?

Porque no es la salida real de su secuencia de comandos real.

Ese es el uso ordinario de larga duración, estándar, común, típico para el error estándar: todo lo que NO sale de su secuencia de comandos.

Cuestiones relacionadas