我已经设置了使用test.py(下)类REDIR一个标准输出重定向。
输出应显示在文本框中都打印报表。 但目前只有“输出1”发送到文本框和“输出2”印在控制台的后面。
我想知道是否有一种方法来重定向子进程的标准输出? 我已经使用subprocess.PIPE和REDIR类本身尝试,但不能得到它的权利。
注:最终,POPEN通话不会被调用一个python文件,所以我不能够只从Test2的得到的字符串。 我也不幸限制到Python 2.6。
谢谢!
test.py:
import sys
from Tkinter import *
import subprocess
class Redir(object):
def __init__(self, textbox):
self.textbox = textbox
self.fileno = sys.stdout.fileno
def write(self, message):
self.textbox.insert(END, str(message))
class RedirectGUI(object):
def __init__(self):
# Create window - Ignore this bit.
# ================================
self.root = Tk()
self.btn = Button(self.root, text="Print!", command=self.print_stuff, state=NORMAL)
self.btn.pack()
self.textbox = Text(self.root)
self.textbox.pack()
# Setup redirect
# ==============
self.re = Redir(self.textbox)
sys.stdout = self.re
# Main window display
# ===================
self.root.mainloop()
def print_stuff(self):
subprocess.Popen(["python", "test2.py"], stdout=self.re)
print "Output1"
if __name__ == "__main__":
RedirectGUI()
test2.py:
class Test2(object):
def __init__(self):
print "Output2"
if __name__ == "__main__":
Test2()