2008-11-04 31 views
1

第一批文件啓動命令提示符,我需要第二個命令在第一個文件的ccontext中。我怎麼能在python中做到這一點?從python啓動vs2008 build

因爲它會啓動批處理,並阻塞,直到批處理(使用其命令提示符上下文)終止,然後在沒有必要上下文的情況下執行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

+0

是否有一個原因,你不是啓動msbuild而是? – FlySwat 2008-11-13 23:27:19

+0

從來沒有聽說過它。 – 2008-11-15 21:33:32

回答

2

我說這一切都完成了。這樣你可以儘可能多地連鎖。有時我會立即生成腳本。

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

您可以在Devenv命令追加到原始的批處理文件的結尾,像這樣:

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

(很明顯,我已經縮短爲簡單起見,命令),這些情況下,我使用的腳本

2

我從設置變量:-)

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

一個批處理文件運行我的Python腳本,但佈雷特的解決方案聽起來更好。

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