2008-11-04 3 views
1

Первый командный файл запускает командную строку, мне нужно, чтобы вторая команда находилась в ccontext первого. как я могу это сделать в python?Запуск vs2008 build from 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') 

думать о нем, как в я нахожусь в Баш, и мне нужно выполнить команду в контексте Perl, поэтому я типа perl -c 'asdf'. выполнение perl и asdf назад не будет работать, мне нужно получить devenv внутри контекста perl.

+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

Я бегу мой Python скрипт из пакетного файла, который задает переменные :-)

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

Но решение Бретта звучит лучше.

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.