Python, subprocess, devenv,为什么没有输出?
我用一个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
的值都一样。
4 个回答
0
这可能是因为你运行的软件没有将信息写到 stdout
或 stderr
。也许它是直接在终端或控制台上输出的。
如果真是这样,你就需要一些 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
这个开关。