我正在编写一个脚本来检查我的系统上的python版本,我注意到python -V
写入错误流,而python -h
,例如,使用标准输出。这种行为有充分的理由吗?为什么python -V写入错误流?
6
A
回答
3
-h选项还用于打印到stderr,因为它不是程序输出的一部分,即输出不是由Python脚本生成的,而是由Python解释器本身生成的。
至于他们为什么改变-h使用stdout?尝试输入python -h
,并将终端窗口设置为标准24行。它滚动屏幕。
现在大多数人都会通过尝试python -h |less
作出反应,但只有在将-h的输出发送到stdout而不是stderr时才有效。所以有一个很好的理由让-h去标准输出,但没有理由改变-V。
2
-h作为你的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);
在这里看到目前的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);
}
所以使用使用标准输出打印到标准错误太多为-h和stderr为-Q。
我看不到任何证据好原因之一的另一种方式。可能它现在不能改变现在不破坏向后兼容性
1
可能没有很好的理由,一些挖掘显示the patch添加选项,但我可以找到任何关于为什么不同的流在讨论中使用的补丁的引用。
2
为什么?
因为它不是实际脚本的实际输出。
这是标准错误的长期,标准,常见,典型的普通用法:不会从脚本输出任何内容。
相关问题
- 1. 为什么jetbrains写错误
- 2. 为什么写入临时流失败?
- 3. 为什么写入响应流时
- 4. 使用写入错误在Powershell中写入错误流
- 5. python写入错误
- 6. Python中支持什么拼写错误/拼写错误?
- 7. 写完后,nodejs gridFS写入流错误
- 8. 为什么Python不写入文件?
- 9. Python:写入类错误
- 10. 写入文件Python,错误?
- 11. 写入文件,流关闭错误,Java
- 12. WINDOWS CMD:为什么我在提示符处输入php-v时收到错误?
- 13. 为什么我无法从PowerShell.Streams.Error.add_DataAdded写入错误?
- 14. 为什么分组的struct.pack会写入错误的数据?
- 15. 为什么在向数组写入值时出现错误?
- 16. 为什么有些PHP错误不会写入PHP日志中?
- 17. Python if/elif语法错误...为什么
- 18. 如何写入Nashorn错误流?
- 19. 导入诅咒的Python错误 - 不知道为什么
- 20. 为什么拼写错误的android:name没有警告或错误?
- 21. 为什么“导入javax.jdo。*”导致错误?
- 22. 为什么Python给我错误的路径错误?
- 23. 为什么要使用缓冲区读取/写入流
- 24. 我为什么能写入VxWorks的命令与交流计划
- 25. 为什么nodejs写入流会导致内存消耗增加?
- 26. void * v []; v [i] = v [j];为什么这是正确的?
- 27. 错误“rails -v”
- 28. 星火:写入错误流文件/ XXX /标准错误产生java.io.IOException:流闭
- 29. Python写入unicode字符错误
- 30. Python Apache Beam Google存储写入错误