Python, подпроцесс, devenv, почему нет вывода? - PullRequest
6 голосов
/ 06 октября 2009

Я строю решение Visual Studio из скрипта Python. Все работает хорошо, за исключением того, что я не могу захватить вывод сборки.

p = subprocess.Popen(['devenv', 'solution.sln', '/build'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(out, err) = p.communicate()
ret = p.returncode

Здесь и out, и err всегда пусты. Это происходит независимо от успеха сборки, как показано в p.returncode.

Ответы [ 4 ]

25 голосов
/ 29 октября 2009

Измените его с «devenv» на «devenv.com». Очевидно, Popen сначала ищет .EXE, но оболочка сначала ищет .COM. Переход на «devenv.com» работал для меня.

devenv значительно быстрее, чем msbuild для инкрементных сборок. Я только что сделал сборку с последним проектом, то есть ничего не должно происходить.

Девенв 23 секунды msbuild 55 секунд.

2 голосов
/ 06 октября 2009

Вместо этого вы должны создать решение с msbuild.exe, которое предназначено для обратной связи с stdout и stderr. msbuild.exe находится по адресу

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\msbuild.exe (для создания решения VS2005) или C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe (для создания решения VS2008)

Обратите внимание, что msbuild.exe не использует переключатель /build, как devenv.exe.

0 голосов
/ 06 октября 2009

Вероятно, ваша проблема в том, что буфер канала заполняется. Проверьте этот вопрос для хорошего ответа.

0 голосов
/ 06 октября 2009

Это, вероятно, потому что программное обеспечение, которое вы используете, не записывает в stdout или stderr. Может быть, пишет напрямую в терминал / консоль .

Если это так, вам понадобятся вызовы win32 api для захвата вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...