Wenn ich ein Python-Skript schreiben Devenv mit configure laufen „Debug | Win32“ tut es nichts

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

  •  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

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top