从python启动vs2008构build

第一批文件启动一个命令提示符,我需要第二个命令在第一个的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上下文中执行一个命令,所以我inputperl -c 'asdf' 。 执行perl和asdf背靠背将无法正常工作,我需要在perl上下文中获取devenv

我使用脚本来处理这些情况。 这样,你可以连锁尽可能多的,你想要的。 有时我会立即生成脚本。

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

我认为实现这个的正确方法是运行这个命令:

 %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也是一个好主意。

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

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

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

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

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

但Brett的解决方案听起来更好。