从Python启动VS2008构建
第一个批处理文件会打开一个命令提示符,我需要第二个命令在第一个命令的上下文中执行。我该如何在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是行不通的,我需要把 devenv
放在perl的环境中。
4 个回答
2
我通过一个批处理文件来运行我的Python脚本,这个文件会设置一些变量 :-)
call ...\vcvarsall.bat
c:\python26\python.exe myscript.py
不过,Brett的解决方案听起来更好。
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也是个好主意。
2
在这种情况下,我会使用一个脚本来完成所有的事情。这样你可以根据需要连接很多操作。有时候我会即时生成这个脚本。
compileit.cmd
call C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
devenv $1.sln /rebuild Debug /Out last-build.txt