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

时间:2009-10-06 13:46:07

标签: python subprocess

我从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 :(得分:25)

将其从'devenv'更改为'devenv.com'。 Apparenty Popen首先查找.EXE,但shell首先查找.COMs。切换到'devenv.com'对我有用。

对于增量构建,

devenv明显快于msbuild。我刚刚做了一个带有最新项目的构建,意味着什么都不应该发生。

devenv 23秒 msbuild 55秒。

答案 1 :(得分: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不会像/build那样进行devenv.exe切换。

答案 2 :(得分:0)

这可能是因为您运行的软件没有写入stdoutstderr。也许是writes directly to the terminal/console

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

答案 3 :(得分:-2)

可能你的问题与管道的缓冲区填满相同。检查this question以获得一个好的答案。