重定向子的stdout(Redirecting subprocess stdout)

2019-09-30 06:43发布

我已经设置了使用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()

Answer 1:

你可以试试这个所以看看,如果你得到了“输出2”

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

如果这样做,将其发送到文本框:)



文章来源: Redirecting subprocess stdout