6

我从 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

4 回答 4

26

将其从“devenv”更改为“devenv.com”。显然 Popen 首先查找 .EXE,但外壳程序首先查找 .COM。切换到“devenv.com”对我有用。

对于增量构建,devenv 明显快于 msbuild。我刚刚使用最新项目进行了构建,这意味着什么都不应该发生。

devenv 23 秒 msbuild 55 秒。

于 2009-10-29T19:59:25.243 回答
2

您应该改为构建解决方案,该解决方案msbuild.exe旨在向 stdout 和 stderr 提供反馈。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不会/builddevenv.exe.

于 2009-10-06T13:58:48.387 回答
0

这可能是因为您正在运行的软件没有写入stdoutstderr. 也许它直接写入终端/控制台

如果是这种情况,您将需要一些win32 api 调用来捕获输出。

于 2009-10-06T13:50:32.163 回答
-2

可能您的问题与管道缓冲区已满相同。检查这个问题以获得一个好的答案。

于 2009-10-06T13:59:09.480 回答