爲什麼可能覆蓋sys.stdout而不是subprocess.Popen.stdout,用我自己的類。 如果它是可能的覆蓋,請告訴我怎麼...Python,爲什麼我不能重寫Popen.stdout
我正在一些GUI項目,我想在「real_time」text_view上打印其他程序的輸出,而不是當一切都完成時。
,當我重寫sys.stdout的我做財產以後這樣的:
class MyStdOut :
def __init__(self) : self.text = ""
def write(self, string) : self.text += string
這裏是一些程序 'pyscript.py'
import os
def main() :
for i in range(10) :
print i
os.system('sleep 0.1') ## this is just to make some delay, i did also 3 loops
if __name__ == '__main__' : main()
,這裏是主程序:
import subprocess as sub
def main() :
popen = sub.Popen('./pyscript.py', stdout=sub.PIPE)
for line in popen.stdout : print 'Line :', line
print 'Main done'
if __name__ == '__main__' : main()
它仍然不是'真正的'時間,當它結束時我會得到一切。
我也試過溝通,但得到相同的結果。
在我的真實程序中,我必須在text_view(GUI GTK +)上打印其他程序的輸出。我懷疑subprocess.stdout必須是文件,但是當我試圖讓一些繼承自IOBase的類時,我也得到了錯誤。
大家都說這是可能的,但我仍然嘗試了許多不同的方式,但沒有成功。
這段代碼與覆蓋sys.stdout有什麼關係?這是一些與sys.stdout完全無關的類。實現流不僅僅是實現write()。你試圖解決的實際問題是什麼?精確而且冗長 - 否則你的問題沒有多大意義。 – 2011-03-27 17:19:12