Когда я пишу скрипт на Python для запуска Devenv с настройкой «Debug | Win32», он ничего не делает - PullRequest
6 голосов
/ 26 июня 2009

Обновление: Когда я использую subprocess.call вместо subprocess.Popen, проблема решается - кто-нибудь знает, в чем причина? И возникла еще одна проблема: я не могу найти способ управления выводом ... Есть ли способ перенаправить вывод из subprocess.call в строку или что-то в этом роде? Спасибо!

Я пытаюсь использовать Devenv для создания проектов, и он прекрасно работает, когда я набираю его в командной строке, как devenv A.sln /build "Debug|Win32" - но когда я использую Python для его запуска, используя Popen(cmd,shell=true), где cmd та же строка, что и выше, она ничего не показывает. Если я уберу |, заменим его только на "Debug", он будет работать ...

Кто-нибудь знает, почему это происходит? Я пытался поставить \ до |, но все равно ничего не произошло ..

Это код, который я использую:

from subprocess import Popen, PIPE

cmd = ' "C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\IDE\\devenv" solution.sln /build "Debug|Win32" '

sys.stdout.flush()
p = Popen(cmd,shell=True,stdout=PIPE,stderr=PIPE)
lines = []
for line in p.stdout.readlines():
    lines.append(line)
out = string.join(lines)
print out
if out.strip():
    print out.strip('\n')
    sys.stdout.flush()

... который не работает, однако, если я поменяю Debug|Win32 на Debug, он отлично работает ..

Спасибо за каждый комментарий здесь

Ответы [ 5 ]

5 голосов
/ 09 июля 2009

Существует разница между devenv.exe и devenv.com, оба из которых являются исполняемыми и находятся в одном каталоге (вздох). Командные строки, использованные в вопросе, и некоторые ответы не говорят, чего они хотят, поэтому я не уверен, что будет использоваться.

Если вы хотите позвонить из командной строки, вам нужно убедиться, что вы используете devenv.com, в противном случае вы можете получить всплывающий графический интерфейс. Я думаю, что это может быть причиной некоторых (но не всех) путаницы.

1 голос
/ 09 декабря 2011

См. Раздел 17.1.5.1. в документации по питону.

В Windows Python автоматически добавляет двойные кавычки вокруг аргумента конфигурации проекта, т. Е. Debug | win32 передается как «Debug | win32» в devenv. Вам не нужно добавлять двойные кавычки, и вам не нужно передавать shell = True для Popen.

Используйте ProcMon для просмотра строки аргумента, переданной в devenv.

0 голосов
/ 26 июня 2009

Похоже, оболочка Windows воспринимает это | как канал (несмотря на кавычки и экранирование). Вы пробовали shell=False вместо этого?

0 голосов
/ 05 июля 2009

Когда используется shell = False, он будет обрабатывать строку как одну команду, поэтому вам нужно передать команду / arugments в виде списка. Что-то вроде:

from subprocess import Popen, PIPE

cmd = [
    r"C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv", # in raw r"blah" string, you don't need to escape backslashes
    "solution.sln",
    "/build",
    "Debug|Win32"
]

p = Popen(cmd, stdout=PIPE, stderr=PIPE)
out = p.stdout.read() # reads full output into string, including line breaks

print out
0 голосов
/ 26 июня 2009

попробуйте двойные кавычки, например: 'devenv A.sln / build "Debug | Win32"'

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