2

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()
4

1 に答える 1

2

これを試すことができるので、「Output2」が得られるかどうかを確認してください

task = subprocess.Popen(["python", "test2.py"], stdout=subprocess.PIPE)
print task.communicate()

もしそうなら、それをテキストボックスに送ってください:)

于 2013-06-06T15:40:34.953 に答える