我希望我的程序默認爲標準輸出,但可以選擇將其寫入文件。我應該創建自己的打印功能並調用那個有輸出文件的測試,或者有更好的方法嗎?這對我來說似乎效率低下,但我可以想到的每種方式都會爲每次打印呼叫調用附加的測試。我知道從長遠來看,這真的不重要,至少在這個劇本中,但我只是想學習好的習慣。處理輸出重定向的最佳方式是什麼?
回答
寫入文件對象,並且當程序啓動時,該對象指向sys.stdout或指向用戶指定的文件。
Mark Byers的答案更像unix,大多數命令行工具只使用stdin和stdout,並讓用戶按照他們認爲合適的方式進行重定向。
只需用print打印標準即可。如果用戶希望將輸出重定向到一個文件,他們可以這樣做:
python foo.py > output.txt
優秀的一點,我沒有想到這一點。但是,我仍然不能這樣做,因爲我也打印狀態消息到stdout,我不想進入該文件。 – kryptobs2000 2011-02-13 00:34:04
@ kryptobs2000:你知道狀態和錯誤信息存在stderr,不是嗎?將狀態消息發送到`sys.stdout`有什麼意義? – tzot 2011-02-19 20:12:16
我的反應將是輸出到一個臨時文件,然後或者轉儲到標準輸入輸出,或將其移動到他們要求的。
我建議你使用日誌模塊和logging.handlers ...流,輸出文件等。
如果您在使用子模塊,然後根據您從您的命令行採取的選項,你可以有一個打開文件對象的stdout選項。這樣,從程序內部可以重定向到一個文件。
import subprocess
with open('somefile','w') as f:
proc = subprocess.Popen(['myprog'],stdout=f,stderr=subprocess.PIPE)
out,err = proc.communicate()
print 'output redirected to somefile'
不,您不需要創建單獨的打印功能。在Python 2.6,你有這樣的語法:
# suppose f is an open file
print >> f, "hello"
# now sys.stdout is file too
print >> sys.stdout, "hello"
在Python 3.X:
print("hello", file=f)
# or
print("hello", file=sys.stdout)
所以,你真的沒有區分文件和標準輸出。他們是一樣的。
的玩具例子,它輸出「你好」你想要的方式:
#!/usr/bin/env python3
import sys
def produce_output(fobj):
print("hello", file=fobj)
# this can also be
# fobj.write("hello\n")
if __name__=="__main__":
if len(sys.argv) > 2:
print("Too many arguments", file=sys.stderr)
exit(1)
f = open(argv[1], "a") if len(argv)==2 else sys.stdout
produce_output(f)
注意,印刷過程抽象它是否與標準輸出或文件的工作。
- 1. 什麼是在IIS中處理數千個URL重定向的最佳方式
- 2. 管理重定向的最佳方式
- 3. 在Selenium中聲明重定向的最佳方式是什麼?
- 4. 什麼是將www.example.com重定向到example.com的最佳方式
- 5. 做移動重定向的最佳方式是什麼?
- 6. 在php中重定向url的最佳方式是什麼?
- 7. 處理變更管理的最佳方式是什麼?
- 8. 處理重複方法調用的最佳做法是什麼?
- 9. 處理失敗的nonce驗證的最佳方式是什麼?
- 10. 什麼是處理失敗的Web請求的最佳方式?
- 11. Android應用重新定位方向變化,處理的最佳方式是什麼?
- 12. PHPexcel出口什麼是處理大量出口的最佳方式
- 13. 處理「重複」的最佳方式
- 14. 處理jQuery ajax異步調用的最佳方式是什麼?
- 15. 處理彼此使用模塊的最佳方式是什麼?
- 16. 在查找表中處理I18N的最佳方式是什麼?
- 17. 處理並行telnet連接的最佳方式是什麼?
- 18. 寫入批處理腳本的最佳方式是什麼?
- 19. 處理多臺顯示器的最佳方式是什麼?
- 20. 什麼是學習數字圖像處理的最佳方式?
- 21. 在WPF中處理驗證的最佳方式是什麼?
- 22. 什麼是用Javascript處理時區的最佳方式
- 23. 處理視網膜顯示的最佳方式是什麼?
- 24. 處理django模型對象的最佳方式是什麼?
- 25. 處理大型數據表的最佳方式是什麼?
- 26. 處理此XML Feed的最佳方式是什麼?
- 27. 在Asp.Net MVC 3中處理DropDownListFor的最佳方式是什麼?
- 28. 使用SDL/C++處理事件的最佳方式是什麼
- 29. 在python中處理字典的最佳方式是什麼?
- 30. 處理SQLite數據庫的最佳方式是什麼?
謝謝,這可能是我會做的。 – kryptobs2000 2011-02-13 00:35:30