是否有與Python的OutputStream或PrintWriter等價的Python僞指令?python相當於java的OutputStream?
我希望能夠有一個表示stdout/sterr,或文件,或其他東西(管道或套接字或虛擬水槽)流的句柄,並抽象出它是什麼樣的東西,所以我可以發送輸出到它。
我該怎麼做?
是否有與Python的OutputStream或PrintWriter等價的Python僞指令?python相當於java的OutputStream?
我希望能夠有一個表示stdout/sterr,或文件,或其他東西(管道或套接字或虛擬水槽)流的句柄,並抽象出它是什麼樣的東西,所以我可以發送輸出到它。
我該怎麼做?
「抽象出它是什麼類型」 Python中自動完成 - 這是稱爲「鴨子打字」。只需將任何類似文件的對象傳遞給函數,並使用類似文件的對象的接口。
FWIW,在sys
模塊中,標準輸入/輸出/誤差流由stdin
,stdout
和stderr
表示。要獲取讀取和寫入字符串的文件類對象,請使用StringIO
模塊。
你只需要一個實現文件,管道,流等等方法的對象。舉例來說,我當我想我脫離Python程序中使用這個類有時候,我想重定向sys.stderr/sys.stdout的:
class Log(object):
"""used for logging for background process"""
def __init__(self, f):
self.f = f
def write(self, s):
self.f.write(s)
self.f.flush()
sys.stdout = sys.stderr = Log(open('/tmp/daemonlog', 'a+'))