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






Вы можете добавить команду devenv в конец исходного командного файла следующим образом:
'%comspec% /k "...vcvarsall.bat" x86 && devenv asdf.sln /rebuild ...'
(очевидно, я сократил команды для простоты)
В таких ситуациях я использую скрипт, который все это делает. Таким образом, вы можете связать столько цепочек, сколько захотите. Иногда я создаю сценарий на лету.
compileit.cmd
call C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
devenv $1.sln /rebuild Debug /Out last-build.txt
2-е голосование за создание сценария и его запуск. Поместите командные строки в файл, затем вызовите его, а затем удалите файл. Сохраняет еще один артефакт сборки, который необходимо поддерживать за пределами вашего основного сценария сборки (для нас - ant).
К вашему сведению: devenv.exe никогда не будет запущен, если вы не используете команду «call» для вызова vcvarsall.bat.
devenv - это неправильный способ сборки из командной строки. Вы должны использовать vcbuild для vc <= 9.0 и msbuild для версий> = 10.0.
Я запускаю свой скрипт Python из командного файла, который устанавливает переменные :-)
call ...\vcvarsall.bat
c:\python26\python.exe myscript.py
Но решение Бретта звучит лучше.
Я думаю, что правильный способ добиться этого - запустить эту команду:
%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.
Есть ли причина, по которой вы вместо этого не запускаете msbuild?