我从Python脚本构建Visual Studio解决方案。一切都很好,除了我无法捕获构建输出。
p = subprocess.Popen(['devenv', 'solution.sln', '/build'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = p.communicate()
ret = p.returncode
此处,out
和err
始终为空。无论p.returncode
中的构建成功与否,都会发生这种情况。
答案 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)
这可能是因为您运行的软件没有写入stdout
或stderr
。也许是writes directly to the terminal/console。
如果是这种情况,您需要一些win32 api calls来捕获输出。
答案 3 :(得分:-2)
可能你的问题与管道的缓冲区填满相同。检查this question以获得一个好的答案。