使用 subprocess.run 启动时,批处理执行被阻止

batch execution is blocked when launched using subprocess.run

我有以下批次用于启动 eclipse/tasking 为我的 C 项目生成 makefile:

test_eclipsec.bat

echo off

set my_eclipse=C:\Program Files\TASKING\TriCore v6.3r1\ctc\eclipse
set my_workspace=C:\Users\firsname.name\Desktop\Repositories\PF_SW
set my_project=xxx
set my_project_config=Release

echo Generating Makefiles
"%my_eclipse%\eclipsec.exe" -nosplash -application com.tasking.managedbuilder.headlessbuild -data %my_workspace% -generateMakefile %my_project%/%my_project_config%
echo Generating Makefiles end

这个脚本本身运行良好。

但我希望从我的 Python 脚本中启动此批处理脚本。 所以在我的 Python 脚本中,我调用了以下函数:

    def generate_makefile(self):
        batch_path = Path("msw/support/build/test_eclipsec.bat")
        subprocess.run(batch_path)

python 脚本打印以下行:

Generating Makefiles

这是我的批处理脚本中的回显。 但是 Python 脚本被阻止了。它没有别的(它应该),我必须手动停止我的 Python 脚本的执行。 好像卡在了eclipse的执行上。

我还尝试使用 subprocess.run() 直接从 python 运行 eclipse cmd 行。但它也卡住了。

我不知道如何解决这个问题。 任何帮助将不胜感激。

subprocess.run 是阻塞调用。它等待您的命令完成,然后 returns 一个 CompletedProcess 实例。您确定您等待构建命令完成的时间足够长吗?

我发现了问题。这是我的 IDE (Pycharm) 的控制台,它没有处理子进程(仍然不知道为什么)。我在 Pycharm 中更改了一些设置(在输出控制台中模拟终端),现在它运行良好。