python - pyinstaller exe 不使用子进程运行批处理文件
问题描述
我的 GUI 程序启动了某种求解器(MSC Mentat),它仅由批处理文件触发,我正在使用子进程来触发它。这个批处理文件需要一些参数,总命令如下所示:
C:\MSC.Software\Marc\2021.1.0\mentat2021.1\bin\mentat.bat -pr myprocfile.proc -bg -szgr 1124 676
这是我的代码片段:
def start_marc_process(self):
"""Long running task"""
# Start Process
try:
command = "C:\MSC.Software\Marc\2021.1.0\mentat2021.1\bin\mentat.bat -pr myprocfile.proc -bg -szgr 1124 676"
sb.Popen(command, shell=True, stdout=sb.PIPE, stderr=sb.PIPE, stdin=sb.PIPE, cwd=self.working_directory).wait()
except Exception as ex:
self.progress.emit("Exception Occured... Ready.")
self.finished_wexception.emit()
else:
# Emit signal when long running task finished.
self.finished_normally.emit()
我可以从我的 vscode 集成终端运行这段代码,它运行良好。但是,当我使用 pyinstaller 创建可执行文件时,无论在 pyinstaller 上使用 --noconsole 参数,它都不会执行子进程行。
这里有一个类似的问题:subprocess 似乎在 pyinstaller exe 文件中不起作用。但就我而言, subprocess 命令不是 exe 文件,而是批处理文件。我用虚拟子进程命令(如“notepad.exe”或“echo hello”)尝试了我的代码,它在 pyinstaller 上使用和不使用 --noconsole 参数的集成终端和 exe 文件上都可以正常工作。
我也试过了os.system()
,同样的事情一次又一次地发生。subprocess.call()
subprocess.run()
顺便说一句,我正在使用 Pyqt5 和 Pyqt 线程来防止“无响应”窗口,因为进程很长。
操作系统:Windows 10
解决方案
推荐阅读
- python - 想要从列表中调用单词,但在每个条目之前总是有一个 /n
- java - 在执行之前将文件传递给 Gitlab 管道作业
- excel - Excel VBA - 确保 Numlock 始终打开
- latex - 如何使表格中的垂直线没有任何间隙?
- java - javax.net.ssl.SSLHandshakeException:无法找到请求目标的有效证书路径
- java - Android Studio Javadoc 生成错误:找不到符号 R
- javascript - 错误:传递给 tf.browser.fromPixels() 的像素必须是 HTMLImageElement
- sql - 从 SQL 的结果中删除列
- javascript - 获取有关 React 类结果的信息
- pdf - 是否有可能在创建的 pdf 文档中允许用户添加文本、添加复选框和删除图像以自定义 PDF 表单?