在Windows上很容易.只需用pythonw运行你的程序而不是python,代码将在后台执行.
所以,我希望实现的目标很容易安排.
我有一个应用程序,它真的是一个做地下工作的服务.但是这项服务需要一个控制面板.
所以,在Windows上我使用wxPython来创建一个GUI,甚至一些wx东西来提供所需的服务,当用户完成调整后,她/他点击隐藏和显示(False)在主窗口上调用.
因此,GUI消失,服务在后台继续工作.用户可以随时使用热键将其恢复.
麻烦的是,在Mac OS X上,这种策略只在某种程度上起作用.
当调用wx.Frame.Show(False)时,窗口随其菜单栏一起消失,服务工作正常,但应用程序仍在那里可见.
无论您无法对其进行任何操作,都可以切换到它.它仍然存在于Dock等等.
当程序使用python或pythonw或与Py2App捆绑时会发生这种情况.
无论我做什么,图标都会停留在那里.
必须有一些技巧,允许程序员删除这个顽皮的图标,从而当他/他不想被打扰时,停止打扰可怜的小用户.
隐藏窗口显然是不够的.谁知道诀窍?
注意:我真的很想按照上面描述的方式进行,而不是混淆两个独立的进程和IPC.
编辑:
经过多次挖掘,我发现了这些:
http://codesorcery.net/2008/02/06/feature-requests-versus-the-right-way-to-do-it
根据最后一个链接,正确的方法是使用:
[NSApp setActivationPolicy: NSApplicationActivationPolicyAccessory];
Run Code Online (Sandbox Code Playgroud)
要么
[NSApp setActivationPolicy: NSApplicationActivationPolicyProhibited];
Run Code Online (Sandbox Code Playgroud)
所以我想要的(运行时从后台切换到前台和后台)是可能的.
但是如何从Python中做到这一点???
常量:NSApplicationActivationPolicyProhibited和NSApplicationActivationPolicyAccessory存在于AppKit中,但我无法在任何地方找到setApplicationActivationPolicy函数.
NSApp()没有它.
我知道有一种方法可以通过使用ctypes加载objc dylib,委托给NSApp并发送"setApplicationActivationPolicy:<constant_value>",但我不知道wx.App()会造成多大的麻烦.对于应该已经可用的东西来说,它有点多功.
根据我的经验,同时活跃的NSApp()和wx.App()非常不喜欢彼此.
也许我们可以得到wx以某种方式使用的NSApp()实例并使用wx的委托???
请记住,已经建议的解决方案是启动代理并切换到前台或运行多个进程并且在我的情况下执行IPC是非常不受欢迎的.
所以,理想情况下,使用setApplicationActivationPolicy是我的目标,但如何?(简单易行,wx.App()请不要搞砸.)
有任何想法吗???
假设我们有一个用 Python 编写的服务器应用程序。
也可以说这个主服务器进程在启动时又分叉了两个进程。
服务器等待它的客户端,当它到来时决定两个分叉进程中的哪一个应该通过客户端的套接字。
我不想每次有客户来就 fork 一个进程;我想要固定数量的服务器,但是一个主服务器接收连接,然后将它传递给处理请求的特定工作客户端的服务器。
这应该是DOS攻击防护、作业分离等。
有什么技巧可以在启动的 Python 程序之间传递 Python 对象。
一些共享内存或类似的东西?
酸洗套接字对象并通过 IPC 推送它会起作用吗?
我可以加载 JPEG 图像,将其转换为位图并在 wx 应用程序中绘制它。然而,我很难将 PIL 图像对象转换为可以绘制到 wx 应用程序中的位图。
在网上,我能找到的最好的建议是做类似的事情
wx.Bitmap(PIL_image.tobytes())
Run Code Online (Sandbox Code Playgroud)
但是,这给了我以下错误
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 59: invalid start byte
Run Code Online (Sandbox Code Playgroud)
或者
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc8 in position 51: invalid continuation byte
Run Code Online (Sandbox Code Playgroud)
有人对如何解决这一点有很好的提示吗?谢谢!