2009-11-04 58 views

回答

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

为什么?

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

这是标准错误的长期,标准,常见,典型的普通用法:不会从脚本输出任何内容。