首页 > 解决方案 > 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

标签: pythonbatch-filesubprocess

解决方案


推荐阅读