Python - OSX - 如何从App捆绑程序发送信号?

时间:2015-12-17 23:32:59

标签: python macos signals py2app

我发现当我用py2app捆绑我的程序时,我不再能够向其他应用程序发送信号。

我想向“我自己”发送一个信号,告诉我的进程在用户点击我的应用程序之后执行某些操作。

这是一些PyPseudo:

import signal, os, sys

if AlreadyRunning():
    daemonpid = GetPidOfMyOtherDaemon()
    os.kill(daemonpid, signal.SIGUSR1)
    sys.exit()

SaveMyPid()
# Here goes some other code, GUI or something
# That includes as well
def OnSIGUSR1 (signum, stackframe):
    print "I received SIGUSR1 just now!"
signal.signal(signal.SIGUSR1, OnSIGUSR1)

假设GetPid ...()和SaveMyPid()正在文件或某处存储和检索第一个启动进程的pid。

当然,我没有在我的应用程序中使用print,但即使我这样做,该消息也应该出现在Console中。

嗯,从python或pythonw运行时,这段代码运行得很好。

当我第一次启动时,它会执行所需的操作并等待信号。当我再次启动它时,它会向自身发送一个信号,并在第一个进程收到信号时关闭。

但是当我用py2app将它打包到* .app时它不会。

控制台会输出一些LOL错误,如:

The process crashed because of some weird reason.

当然,这并没有告诉我究竟发生了什么。 :(

我的应用套装不会以LSUIElement = 1的形式运行,也不会以BackgroundOnly = 1运行。应该吗?

任何人都知道为什么发送信号不起作用?我应该向info.plist添加一些内容吗?

注意:如果我第一次作为App运行它,但是第二次从终端运行python / pythonw,它会正常地将信号发送到正在运行的应用程序,并且它也会接收它。所以,os.kill()肯定是个问题。

0 个答案:

没有答案