1

第一个批处理文件启动命令提示符,我需要第二个命令位于第一个命令的 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 将不起作用,我需要了解devenvperl 上下文的内部。

4

4 回答 4

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

于 2009-08-06T08:00:33.233 回答
2

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

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

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

于 2008-11-04T23:21:24.560 回答
2

在这些情况下,我使用可以完成所有工作的脚本。这样你就可以尽可能多地链接。有时我会即时生成脚本。

compileit.cmd
  call C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
  devenv $1.sln /rebuild Debug /Out last-build.txt
于 2008-11-04T23:29:38.270 回答
2

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

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

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

于 2008-11-13T23:24:48.193 回答