【发布时间】:2014-11-13 02:36:27
【问题描述】:
我正在使用 Kivy 开发一个 GUI 应用程序,然后它将使用 subprocess.Popen 从 Python 脚本调用外部控制台程序并实时捕获其 stderr 输出。最后,它起作用了(感谢 SO!)。我使用 Pyinstaller 打包应用程序,它会生成一个 *.app,其中包含驻留在 Contents\MacOS 中的可执行文件。如果我直接从终端中运行这个可执行文件,它运行良好。 stderr 输出可以实时捕获。但是,如果我尝试使用终端中的 open 命令直接运行 *.app,或者从 Finder 中双击其 *.app 图标,则对 subprocess.Popen 的调用将停止。
对此我不确定,但是对于 OSX 应用程序如何执行外部程序有任何限制吗?
【问题讨论】:
-
由于您在运行
*.app文件时没有从终端运行,因此Python 进程可能无法获取sys.stdout或sys.stderr的打开文件句柄。 -
subprocess.Popen会运行什么命令?您是否指定其完整路径?尝试完整路径,因为通过 GUI 执行的应用程序的PATH与命令行不同(我觉得这很烦人,但确实如此。)如果这不是问题,Popen报告什么错误?跨度> -
事实证明,在彻底跟踪代码之后,停止应用程序的并不是子进程调用。我在此问答页面的答案部分进行了解释。感谢大家的帮助!
标签: python macos subprocess