Estaba escribiendo un script para inspeccionar la versión de Python en mi sistema y me he dado cuenta de que python -V
escribe en la secuencia de error, mientras que python -h
, por ejemplo, usa la salida estándar. ¿Hay una buena razón para este comportamiento?¿Por qué python -V escribe en la secuencia de error?
Respuesta
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.
-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
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.
¿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.
- 1. ¿Por qué no se escribe fuertemente typedefs?
- 2. ¿Qué verifica la expresión 'v! == v'?
- 3. Response.WriteFile - Escribe una secuencia de bytes
- 4. ¿Cómo se escribe "ingresar la tecla presionada" en una secuencia?
- 5. Python:. V matriz Lista
- 6. Estoy recibiendo un error No puedo leer más allá del final de la secuencia ¿por qué?
- 7. Perl's Pack ('V') función en Python?
- 8. ¿Por qué .net 4.0 escribe todo esto en DebugView?
- 9. ¿Por qué este código de Either-monad no escribe check?
- 10. TypeError: ListControl, debe establecer una secuencia (error de python)
- 11. Yajl análisis error con githubarchive.org secuencia JSON en Python
- 12. Por qué Java OutputStream.write() Toma de enteros pero escribe Bytes
- 13. Error # 2032: error de secuencia
- 14. Python Escribe bytes en el archivo
- 15. ¿Qué significa V en la extensión de archivo Coq?
- 16. ¿Qué secuencia de comandos de Vim recomienda para verificar la sintaxis de Python sobre la marcha?
- 17. escribe caracteres especiales en la tabla excel por el paquete python pyExcelerator/xlwt
- 18. secuencia aleatoria en python
- 19. ¿Qué es mejor: secuencia global única vs. secuencia por tabla?
- 20. ¿Por qué me "esperan un bloque sangrado" cuando intento ejecutar mi secuencia de comandos de Python?
- 21. ¿Por qué obtengo un error de codificación en python warnings.formatwarning en la cadena de formato?
- 22. escribe declaraciones en 'donde' - ¿qué está pasando?
- 23. Hoptoad v. Excepcional v. Excepción_notificación v. Exception_logger
- 24. ¿Qué significa? V = 2 en css?
- 25. C# StreamWriter: ¿cuándo se escribe físicamente la secuencia en el archivo?
- 26. ¿Manera elegante de eliminar elementos de la secuencia en Python?
- 27. En la secuencia de comandos de Python, ¿cómo configuro PYTHONPATH?
- 28. [PersistenceException: Error al obtener la secuencia nextval]
- 29. ¿Puedes usar Python v. 2.7 con Django?
- 30. Imprimir una lista de números en Python v.3