Wenn ich ein Python-Skript schreiben Devenv mit configure laufen „Debug | Win32“ tut es nichts
-
20-08-2019 - |
Frage
Update: Wenn ich die subprocess.call
statt subprocess.Popen
verwenden, ist das Problem gelöst - weiß jemand, was die Ursache ist? Und es kam ein weiteres Problem: Ich kann nicht scheinen, einen Weg zu finden, um die Ausgabe zu steuern ... Gibt es eine Möglichkeit, die Ausgabe von subprocess.call
in einen String oder so ähnlich zu umleiten? Dank!
Ich versuche Devenv
zu verwenden, um Projekte zu bauen, und es läuft ganz gut, wenn ich es in Eingabeaufforderung wie devenv A.sln /build "Debug|Win32"
geben - aber wenn ich einen Python verwenden, um sie auszuführen Popen(cmd,shell=true)
mit dem cmd
die gleiche Linie wie oben ist, es zeigt nichts. Wenn ich die |
entfernen, ändern Sie es nur "Debug"
, es funktioniert ....
Weiß jemand, warum dies geschieht? Ich habe versucht, eine \
vor |
setzen, aber immer noch nichts passiert ..
Dies ist der Code, den ich verwende:
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()
... was aber nicht funktioniert, wenn ich Debug|Win32
mit Debug
tauschen, es funktioniert perfekt ..
Danke für jeden Kommentar hier
Lösung
Wenn shell = False
verwendet wird, wird die Zeichenfolge als einen einzigen Befehl behandeln, so müssen Sie den Befehl / arugments als Liste übergeben .. So etwas wie:
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
Andere Tipps
Es gibt einen Unterschied zwischen devenv.exe
und devenv.com
, von denen beide ausführbar sind, und leben im selben Verzeichnis (seufz). Die Befehlszeilen in der Frage verwendet, und einige Antworten nicht sagen, was sie wollen so nicht sicher, dass ich die gewöhnen werden.
Wenn Sie von der Kommandozeile aufrufen möchten, dann müssen Sie Sie devenv.com
verwenden, um sicherzustellen, sonst sind Sie wahrscheinlich ein GUI Aufspringen zu bekommen. Ich denke, das könnte die Ursache für einige (aber nicht alle) der Verwirrung.
Siehe Abschnitt 17.1.5.1. in der Python-Dokumentation.
Unter Windows Python fügt automatisch die doppelten Anführungszeichen um die Projektkonfiguration Argument heißt Debug | „| win32 Debug“ devenv win32 ist bestanden. Sie brauchen nicht die doppelten Anführungszeichen hinzuzufügen und Sie nicht shell = Getreu Popen übergeben müssen.
Mit ProcMon das Argument Zeichenfolge anzuzeigen weitergegeben devenv.
versuchen doppelt zitiert wie: 'Devenv A.sln / build "Debug | Win32'
Sieht aus wie Windows-Shell ist, dass |
als Rohr unter (trotz der Zitate und entkommt). Haben Sie versucht, shell=False
statt?