gpt4 book ai didi

python - 在线程中运行 Python 脚本并在 GUI 中将 stdout/stderr 重定向到 wx.TextCtrl

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:16 32 4
gpt4 key购买 nike

我正在尝试编写一个 GUI 来读取 python 脚本的设置,然后生成脚本并运行它。该脚本可能需要数十分钟才能运行,因此为了不阻塞 GUI 并让用户感到沮丧,我在单独的线程中运行它。在我这样做之前,我使用一个单独的类将程序的 std.out 和 std.err 重定向到 TextCtrl。这工作正常,除了 GUI 在执行期间被阻止。

从具有重定向类的线程运行脚本仍然会阻塞 GUI。为了不阻止 GUI,我需要关闭重定向。来自脚本和 gui 的所有 std.out/err 然后进入控制台。

这是重定向的类以及我如何调用它。

# For redirecting stdout/stderr to txtctrl.
class RedirectText(object):
def __init__(self,aWxTextCtrl):
self.out=aWxTextCtrl

def write(self,string):
self.out.WriteText(string)

self.redir=RedirectText(self.bottom_text)
sys.stdout=self.redir
sys.stderr=self.redir
sys.stdin=self.redir

我试过使用某种从线程到 GUI 的通信类,但没有成功。也就是说,GUI 仍然被阻止。

有没有人对这个问题有一些提示或解决方案,即在不阻塞 GUI 的情况下从脚本获取 stdout/err 到 GUI?

最佳答案

是的。在线程中,使用 wx.CallAfter 以线程安全的方式将文本发送到 GUI。然后它可以获取文本并显示它。另一种方法是使用子流程并与之通信。这里有一个例子:

http://www.blog.pythonlibrary.org/2010/06/05/python-running-ping-traceroute-and-more/

本文的评论中也列出了一些方法:

http://www.blog.pythonlibrary.org/2009/01/01/wxpython-redirecting-stdout-stderr/

不幸的是,我当时的评论系统在缩进方面做得不好。

关于python - 在线程中运行 Python 脚本并在 GUI 中将 stdout/stderr 重定向到 wx.TextCtrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3556290/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com