如何将wxPython应用转换为无头Unix作业?

1 投票
2 回答
540 浏览
提问于 2025-04-17 15:34

我现在在一台Linux机器上运行的是wx的版本2.8.9.1。

我正在开发的应用程序最开始是为了在Windows系统上运行的。我们计划把核心逻辑的一部分移植到Linux上,并作为一个进程运行。

问题是这台Linux机器是无头的,也就是说没有图形界面(X-windows环境)。但现有的代码是写得很依赖wx这个图形库。

举个例子,我有几个类是wx.EvtHandler的子类。

我可能可以一个一个地重写这些类,但这样做并不是最理想的办法。

在新的wx Pheonix版本中,有一个AppConsole类,看起来可以在没有X-Windows的情况下启动事件循环。不过我本地的wx版本里没有这个类。

我们的最终目标是在定时任务中运行这段代码

我基本上是在寻找一些建议或指引,看看如何解决这个问题。能尽量少重写代码就好了。

2 个回答

2

一种方法是使用你本地的显示器。你可以通过 Ssh 连接到你的服务器,并加上 -X 这个选项,这样就能把显示内容转到你的工作站上。

ssh -X server

然后在你的服务器上启动应用程序,它会自动使用你工作站的显示器。

如果你是Windows用户,可以使用 Xming 或者 Cygwin 这些工具。

另外,你还可以使用 Xvfb,它提供了一个没有显示器的X服务器。然后你可以通过 xvfb-run 来启动你的应用程序,如下所示:

xvfb-run my_wx_application
0

结果发现,重写代码并没有那么难。

我的代码中只依赖了三个wx对象:

1) 继承wx.EvtHandler

2) wx.CallLater

3) wx.CallAfter

所以第一个情况需要重新实现一下。

而其他两个可以很简单地用threading.Timer来替代。

撰写回答