我有一个 python 脚本(无 GUI),它生成一个子线程,而父线程阻止应用程序使用此方法完成:
try:
while True:
time.sleep(1)
except (KeyboardInterrupt, SystemExit):
pass
finally:
cleanup()
当我使用 py2app 从该脚本创建应用程序并运行它时,它停留在 Dock 中并按预期工作,但是当我右键单击时,它显示“应用程序未响应”(与事件监视器中相同)并且完成后我只能选择“强制退出”,这会导致随后出现崩溃报告对话框。
为什么它没有响应,如果原因是 sleep()
,我怎样才能在没有它的情况下保持应用程序打开?
最佳答案
它显示为“未响应”,因为它没有响应。 OS X 上的应用程序(而不是简单的“Unix 可执行文件”/脚本、代理或守护程序)必须响应来自操作系统的消息。
通常,您可以使用 Cocoa run loop 来执行此操作。 PyObjC 提供了一些 high-level helpers这使它变得更加简单,或者只是让您从 Python 访问 Apple 文档描述的相同 Cocoa 方法。
另一种选择是使用脚本包装器,它只运行您的脚本,同时为您维护一个运行循环(带或不带 GUI)。
最后,您真的需要成为一个应用程序吗?
关于python - py2app 应用程序正在运行,但 Mac OS X 显示它没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957709/