test.py のクラス Redir を使用して stdout リダイレクトを設定しました (以下)。
出力には、両方の print ステートメントがテキスト ボックスに表示されます。ただし、現在、「Output1」のみがテキストボックスに送信され、「Output2」は背後のコンソールに出力されます。
サブプロセスの stdout をリダイレクトする方法があるかどうか疑問に思いましたか? 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()