Запуск сборки 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.

Есть ли причина, по которой вы вместо этого не запускаете msbuild?

FlySwat 14.11.2008 02:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
1 086
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете добавить команду 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).

Niniki 05.11.2008 02:33

К вашему сведению: devenv.exe никогда не будет запущен, если вы не используете команду «call» для вызова vcvarsall.bat.

bk1e 05.11.2008 11:33

devenv - это неправильный способ сборки из командной строки. Вы должны использовать vcbuild для vc <= 9.0 и msbuild для версий> = 10.0.

sorin 21.02.2010 11:51

Я запускаю свой скрипт 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.

Другие вопросы по теме