Python—在主Python脚本中运行Python脚本,并捕获标准输出?

Python—在主Python脚本中运行Python脚本,并捕获标准输出?,python,stdout,sys,Python,Stdout,Sys,我的困境是,我希望能够使用“run”函数运行另一个python脚本,并且能够从该脚本实时捕获stdout并在GUI中显示它。这里有doLogic()命令,这样我就可以用另一个脚本在控制台上发生的事情实时更新GUI 这段代码的结果是,文本仍然显示在控制台窗口中,但是如果我执行任何print()命令(在主脚本中),它们将显示在我的GUI中,正如您所期望的那样,因为我重定向了sys.stdout 目前他们只是垃圾邮件我的文本框,因为我只是一次又一次地将它设置为已打印的内容,但我现在主要关心的是在我的“

我的困境是,我希望能够使用“run”函数运行另一个python脚本,并且能够从该脚本实时捕获stdout并在GUI中显示它。这里有doLogic()命令,这样我就可以用另一个脚本在控制台上发生的事情实时更新GUI

这段代码的结果是,文本仍然显示在控制台窗口中,但是如果我执行任何print()命令(在主脚本中),它们将显示在我的GUI中,正如您所期望的那样,因为我重定向了sys.stdout


目前他们只是垃圾邮件我的文本框,因为我只是一次又一次地将它设置为已打印的内容,但我现在主要关心的是在我的“sub”脚本中从stdout中获取文本。

在piping之后迭代stdout这是什么意思?你需要添加一个可运行的示例,我不知道你的代码是什么,返回
Popen([“python”,self.filename],stdout=PIPE)
where PIPE是subprocess.PIPE将允许您在stdout上迭代,但您需要小心,否则您的gui将冻结。您可能希望运行带有线程的队列,但这完全取决于您使用的是什么。正如我前面所说的,一个可运行的示例会有所帮助,或者至少会帮助您使用哪个库我编辑了我的代码,以包含上面列出的管道参数。现在,我的GUI中显示了信息,但只有在脚本完成运行之后(我有一个只打印几行的测试脚本,但主脚本要长得多,还需要输入)。它也会冻结。
import subprocess as sub

class GUI:

    def __init__(self):
        # Redirect the stdout to self.textStream
        self.textStream = StringIO()
        sys.stdout = self.textStream

    def run(self,*args):
        sub.Popen(["python",self.filename])

    def doLogic(self):
        self.TextBox['state'] = 'normal'
        self.TextBox.insert('end',self.textStream.getvalue())
        self.TextBox['state'] = 'disabled'

G = GUI()

while True:
    G.root.update()
    G.doLogic()