python - pyinstaller:生成 exe 后 popen 不运行
问题描述
我使用pyinstaller编译了我的python应用程序并且exe工作正常,但是当我在没有python的另一台机器上运行它时,包含的代码的任何部分subprocess.Popen()
都不会运行。
我读了太多问题,但我无法解决这个问题。
我的流行线:
try:
process = subprocess.Popen(['python', os.path.abspath('about.py')],stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE,
shell=True)
except Exception as e:
print(e)
请注意,可执行文件在主机上运行,但在另一台机器上运行但在启动 popen 时失败。
===更新====
控制台什么也不显示,也不打印异常,所以我猜这是找不到 python 的问题。我怎样才能解决这个问题?
===更新2====
按照 viilpe 的建议,我使用了 "exec(open..." 但它要求我首先导入 about.py 模块;导入模块在主模块之上运行它。
将 exec(open...) 放在 try\except 中会同时运行主模块和 about 模块;破坏应用程序的 GUI。
我使用“kivy”作为我的 GUI 库。
解决方案
PyInstaller 的全部意义在于使目标计算机能够在没有独立python
安装的情况下运行您的脚本。您不能subprocess
在未(必须)安装的工具上运行 a 。
有多种方法可以将 Python 作为其本身的子进程运行;从探索multiprocessing
图书馆开始。
如果运行 Python 两次的要求并不难,那么绝对最简单的解决方案是import about
将代码作为脚本的一部分运行。这可能需要对about.py
.
推荐阅读
- android - 在约束布局中以编程方式将约束添加到视图
- matlab - 给定两点通过其中心旋转线
- html - SVG 多边形元素仅给出图像的一半
- android - 如何使用 Jetpack 导航组件修复 CollapsingToolbarLayout 不与 RecyclerView 折叠?(导航界面)
- python - 如何将一个变量分配给txt文件的两列
- c++ - QT:小部件中默认文本的多语言支持
- android - 将 retrained_graph.pb 转换为 tflite 模型
- mongodb - 在 Loopback 3 中创建扁平的单一关系
- sql - 如何计算特定文本字符串出现的次数并按其他列分组
- javascript - 我如何使用 ngFor 来设计这个(可能是嵌套的)表