从python启动vs2008构建

时间:2008-11-04 23:08:03

标签: python windows visual-studio-2008 build-automation

第一个批处理文件启动命令提示符,我需要第二个命令位于第一个命令提示符的ccontext中。我怎么能在python中做到这一点?

按原样,它启动批处理并阻塞,直到批处理(带有命令提示符上下文)终止,然后在没有必要上下文的情况下执行devenv

os.system(r'%comspec% /k ""C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"" x86')
os.system(r'devenv asdf.sln /rebuild Debug /Out last-build.txt')

把它想象成我在bash中,我需要在perl上下文中执行命令,所以我输入perl -c 'asdf'。执行perl和asdf背靠背将无法正常工作,我需要在perl上下文中获取devenv

4 个答案:

答案 0 :(得分:3)

我认为实现这一目标的正确方法是运行此命令:

%comspec% /C "%VCINSTALLDIR%\vcvarsall.bat" x86 && vcbuild "project.sln"

下面你会看到同一命令的Python版本:

os.system('%comspec% /C "%VCINSTALLDIR%\\vcvarsall.bat" x86 && vcbuild "project.sln"')

这应该适用于任何Visual Studio,因此编辑问题以使其更通用是个好主意。

我发现vcvarsall.bat的位置有一个小问题 - 因为VCINSTALLDIR并不总是设置,所以你必须使用注册表项来检测安装程序所在的位置:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0]
"InstallDir"="c:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\"

..\..\VC\vcvarsall.bat添加到此路径。另外,测试其他版本的Visual Studio也是一个好主意。

答案 1 :(得分:2)

您可以将devenv命令附加到原始批处理文件的末尾,如下所示:

'%comspec% /k "...vcvarsall.bat" x86 && devenv asdf.sln /rebuild ...'

(显然我为了简单起见缩短了命令)

答案 2 :(得分:2)

我在这些情况下使用脚本来完成所有操作。这样你就可以随意链接。有时我会动态生成脚本。

compileit.cmd
  call C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
  devenv $1.sln /rebuild Debug /Out last-build.txt

答案 3 :(得分:2)

我从设置变量的批处理文件中运行我的Python脚本: - )

call ...\vcvarsall.bat
c:\python26\python.exe myscript.py

但布雷特的解决方案听起来更好。