我发现当我用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()肯定是个问题。