我正在编写一个脚本来检查我的系统上的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. 为什么要以大块写入流?
- 5. 使用写入错误在Powershell中写入错误流
- 6. python写入错误
- 7. Python中支持什么拼写错误/拼写错误?
- 8. 写完后,nodejs gridFS写入流错误
- 9. python:为什么不写入新文件?
- 10. 为什么Python不写入文件?
- 11. 流式签名错误。为什么?
- 12. _(“写入错误”)是什么意思?
- 13. Python:写入类错误
- 14. 写入文件Python,错误?
- 15. 为什么Log4Net不写错误日志?
- 16. 为什么Python在写入文件时返回错误“需要浮动”?
- 17. 写入文件,流关闭错误,Java
- 18. WINDOWS CMD:为什么我在提示符处输入php-v时收到错误?
- 19. 为什么在向数组写入值时出现错误?
- 20. 为什么有些PHP错误不会写入PHP日志中?
- 21. 为什么分组的struct.pack会写入错误的数据?
- 22. 为什么安装Rails时出现“写入权限”错误?
- 23. 为什么我无法从PowerShell.Streams.Error.add_DataAdded写入错误?
- 24. 写入错误日志时会发生什么错误?
- 25. 为什么我的程序错误(python)?
- 26. 为什么python scrapy显示“twisted.internet.error.TimeoutError”错误
- 27. Python if/elif语法错误...为什么
- 28. python错误,不知道为什么
- 29. 如何写入Nashorn错误流?
- 30. 为什么我写入python子流程stdin管道时数据丢失?