2009-11-04 55 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

爲什麼?

因爲它不是實際腳本的實際輸出。

這是標準錯誤的長期,標準,常見,典型的普通用法:不會從腳本輸出任何內容。