我正在編寫一個腳本來檢查我的系統上的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存儲寫入錯誤