为什么python -V写入错误流?

时间:2009-11-04 09:34:36

标签: python

我正在编写一个脚本来检查我系统上的python版本,我注意到python -V写入错误流,而python -h例如使用标准输出。这种行为有充分的理由吗?

4 个答案:

答案 0 :(得分:3)

-h选项也用于打印到stderr,因为它不是程序输出的一部分,即输出不是由Python脚本生成的,而是由Python解释器本身生成的。

至于为什么他们改变-h使用stdout?尝试在终端窗口设置为标准24行的情况下键入python -h。它滚出屏幕。

现在大多数人会通过尝试python -h |less来做出反应,但这只有在将-h的输出发送到stdout而不是stderr时才有效。所以有一个很好的理由让-h去stdout,但没有理由改变-V。

答案 1 :(得分:2)

-h也用于打印到stderr,正如你在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);
}

因此用法使用stdout表示-h和stderr表示-Q。

我无法看到任何证据表明良好的原因是另一种方式。可能在不破坏向后兼容性的情况下现在无法更改

答案 2 :(得分:2)

为什么?

因为它不是您实际脚本的实际输出。

这是标准错误的长期,标准,常见,典型,普通用途:一切都不是从脚本输出的。

答案 3 :(得分:1)

可能没有任何理由,一些挖掘显示the patch添加了选项,但我可以找到有关为什么在讨论补丁时使用不同流的原因。