Quando scrivo uno script python per eseguire Devenv con configure “Debug | Win32” non fa nulla

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

  •  20-08-2019
  •  | 
  •  

Domanda

Aggiornamento: Quando uso il subprocess.call anziché subprocess.Popen, il problema è risolto - qualcuno sa qual è la causa? E venne un altro problema: non riesco a trovare un modo per controllare l'uscita ... C'è un modo per reindirizzare l'output da Devenv a una stringa o qualcosa del genere? Grazie!

Sto cercando di utilizzare devenv A.sln /build "Debug|Win32" per costruire progetti, e funziona bene quando si digita nel prompt dei comandi come Popen(cmd,shell=true) - ma quando uso un pitone per eseguirlo utilizzando cmd dove | è la stessa linea come sopra, mostra nulla. Se rimuovo il "Debug", modificarlo a \ solo, funziona ....

Qualcuno sa perché questo accade? Ho provato a mettere un Debug|Win32 prima Debug, ma ancora non è successo niente ..

Questo è il codice che sto usando:

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()

... che non funziona, tuttavia, se sostituisco <=> con <=>, funziona perfettamente ..

Grazie per ogni commento qui

È stato utile?

Soluzione

Quando shell = False viene usato, si tratterà la stringa come un unico comando, quindi è necessario passare il comando / arugments come una lista .. Qualcosa di simile:

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

Altri suggerimenti

C'è una differenza tra il devenv.exe e devenv.com, che sono entrambi eseguibili e vivono nella stessa directory (sigh). Le righe di comando utilizzati per la domanda e alcune risposte non dicono che vogliono, quindi non sono sicuro di quale andranno utilizzati.

Se si desidera chiamare da linea di comando, allora avete bisogno per assicurarsi di utilizzare <=>, altrimenti è probabile che per ottenere una GUI popping up. Penso che questo potrebbe essere la causa di alcuni (ma non tutti) della confusione.

Si veda la sezione 17.1.5.1. nella documentazione di python.

In Windows, Python aggiunge automaticamente le virgolette attorno l'argomento configurazione del progetto cioè Debug | win32 è passato come "Debug | win32" per devenv. Non è necessario aggiungere le virgolette e non è necessario passare shell = True per Popen.

Usa ProcMon per visualizzare la stringa argomento passato alla devenv.

provare doppia citando come: 'devenv A.sln / build "Debug | Win32"'

appare come shell di Windows' sta prendendo che | come un tubo (nonostante le citazioni e fughe). Hai provato shell=False invece?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top