Python, subprocess, devenv,为什么没有输出?

6 投票
4 回答
5327 浏览
提问于 2025-04-15 14:51

我用一个Python脚本来创建一个Visual Studio的解决方案。一切都运行得很好,但我无法获取构建的输出信息。

p = subprocess.Popen(['devenv', 'solution.sln', '/build'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = p.communicate()
ret = p.returncode

在这里,outerr总是为空。这种情况无论构建是否成功,p.returncode的值都一样。

4 个回答

0

这可能是因为你运行的软件没有将信息写到 stdoutstderr。也许它是直接在终端或控制台上输出的。

如果真是这样,你就需要一些 win32 API 调用 来捕捉这些输出。

27

把它从 'devenv' 改成 'devenv.com'。显然,Popen 首先会找 .EXE 文件,而命令行则是先找 .COM 文件。换成 'devenv.com' 对我来说是有效的。

devenv 在增量构建时比 msbuild 快很多。我刚刚用一个最新的项目进行了构建,这意味着其实什么都不应该发生。

devenv 用了 23 秒,msbuild 用了 55 秒。

2

你应该使用 msbuild.exe 来构建解决方案,因为它是专门用来将信息反馈到标准输出和错误输出的工具。 msbuild.exe 的位置在这里:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\msbuild.exe (用于构建 VS2005 的解决方案)或者 C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe (用于构建 VS2008 的解决方案)

需要注意的是, msbuild.exe 不像 devenv.exe 那样需要使用 /build 这个开关。

撰写回答