2013-02-11 11 views
0

我目前在Linux機器上運行wx的2.8.9.1。如何將wxPython應用程序轉換爲無頭unix作業?

我正在使用的應用程序最初是爲了在MS Windows上運行而編寫的。我們計劃將核心邏輯的一部分移植到linux上,並將其作爲一個進程運行。

問題是,Linux的盒子是無頭的。我們不會有X-windows環境。但是現有的代碼庫是以與wx層緊密結合的方式編寫的。

例如,我有一對夫婦的這是wx.EvtHandler

的子類,我可能可以通過一個重寫它​​們之一,但它確實不理想。

在新的wx Pheonix中,有一個AppConsole class,它似乎能夠在沒有X-Windows的情況下啓動事件循環。然而,它在我的本地版本的wx中不可用。

的目標是最終運行的代碼在cron作業

我基本上是在尋找一些建議/指針就如何解決這一問題。避免儘可能多的重寫會很好。

+1

你有沒有試過[vncserver](http://www.tightvnc.com/)? – 2013-02-12 00:04:09

+0

@TurboJ感謝您的建議。我在我的問題中澄清了我的目標。爲了進行X-Window會話,我無法依賴外部服務器/工作站 – 2013-02-12 00:11:58

+0

對於vncserver,您*不具有外部依賴性。 vncserver作爲本地X服務器運行。 – 2013-02-12 00:16:13

回答

0

原來重寫是不是太糟糕。

只有三對WX對象依賴於我的代碼

1)繼承wx.EvtHandler

2)wx.CallLater

3)wx.CallAfter

所以第一案例需要重新編譯

其他可以輕鬆地由threading.Timer替換。

1

一種方法是使用您的本地顯示器。 Ssh與選項-X您的服務器,以顯示重定向到您的工作站

ssh -X server 

你的服務器上啓動應用程序時,它會自動使用工作站的顯示。

對於Windows,例如存在XmingCygwin

作爲替代,您可以使用Xvfb,它提供了一個無頭X服務器。然後,您可以通過啓動應用程序xvfb-run作爲

xvfb-run my_wx_application 
+0

謝謝你的建議,但是它不適合我的用例。最終我想運行核心代碼作爲cron作業。我不想有一個外部工作站 – 2013-02-12 00:08:13

+0

@AnthonyKong如果你想運行真正的無頭,你可能會考慮xvfb,它仍然是一個X服務器。請參閱最新的答案。 – 2013-02-12 00:19:55

+0

Xvfb聽起來很有趣。然而,Linux盒子生活在'企業'環境中,所以很難要求附加/外部軟件。我正在尋找一些方法來啓動沒有完整的X-windows的wx事件循環。即最好是源代碼級的解決方案。最後,將業務邏輯從表示層分離出來是有意義的。 – 2013-02-12 00:26:58