我正在編寫一個腳本來檢查我的系統上的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管道時數據丟失?