Когда я пишу скрипт Python для запуска Devenv с настройкой «Debug|Win32», он ничего не делает.

StackOverflow https://stackoverflow.com/questions/1049784

  •  20-08-2019
  •  | 
  •  

Вопрос

Обновлять: Когда я использую 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, работает отлично..

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top