2016-05-11 3 views
0

Ich versuche Python zu verwenden, um eine ausführbare Datei (Windows 7) mit Parametern auszuführen. Ich konnte das Programm ausführen lassen, aber die Anzahl der Parameter, die ich verwenden kann, um zu beweisen, dass das Python-Skript mit Parametern funktioniert, ist begrenzt. Die beste ist, wie so formatiert:Python - Programm mit Parametern mit Dateiausgabe ausführen

-debugoutput debug.txt

ich diese getestet mit einem Windows mit einem bearbeiteten Ziel Verknüpfung und es funktioniert, es schafft eine Debug-Ausgabe im Programmverzeichnis. Hier

ist der Code, ich verwende:

import subprocess 
args = [r"C:\Users\MyName\LevelEditor\LevelEditor.exe", "-debugoutput debug.txt"] 
subprocess.call(args) 

Das das Programm läuft, aber die Debug-Ausgabe wird nicht erstellt. Ich habe versucht, ein "r" vor den Parameter zu setzen, aber das machte keinen Unterschied. Ich nehme an, dass es ein einfacher Formatierungsfehler ist, aber ich kann keine Beispiele finden, von denen ich das gleiche mache.

UPDATE:

Vielen Dank für die Antworten jeder, egal, einfache Formatierungsfehler in der Tat.

+2

kann es amiguity in den Raum zurückzuführen sein, haben Sie versucht, args = [ ' "yourpath.exe", "-debugoutput", "debug.txt"]? – zoubida13

+0

Ich weiß nicht, ob es funktioniert, aber 'importieren Subprozess args = [r" C: \ Benutzer \ MeinName \ LevelEditor \ LevelEditor.exe "," -debugoutput "," debug.txt "] subprocess.run (args) ' – gunzapper

+0

Das Aufteilen des Parameters funktioniert, ich weiß nicht, warum ich nicht daran gedacht habe, das zu versuchen. – MonikerHart

Antwort

1

In-Code-Definition ergibt Aufruf von Shell-Befehlszeile:

C:\Users\MyName\LevelEditor\LevelEditor.exe "-debugoutput debug.txt" 

Wie Sie sehen können Durch das Zusammenführen von -debugoutput debug.txt mit einem einzelnen Listenelement haben Sie explizit angegeben, dass der Abstand zwischen ihnen nicht als Befehlszeilenargumenttrennzeichen analysiert werden soll.

Um das erwartete Verhalten zu erreichen, setzen Sie den Dateinamens-String als separates Element in die Argumentenliste.

[r"C:\Users\MyName\LevelEditor\LevelEditor.exe", "-debugoutput", "debug.txt"] 
0

Soweit ich weiß, Sie die Argumente durch den Raum aufteilen müssen, so würde Ihre args wie folgt aussehen:

args = [r"C:\Users\MyName\LevelEditor\LevelEditor.exe", "-debugoutput", "debug.txt"] 

funktioniert das?

+0

Danke, das hat funktioniert. Die Ausgabe erscheint im falschen Ordner (ich musste danach suchen), aber es läuft das Programm mit dem Parameter. – MonikerHart

0

Ich weiß nicht, ob es funktioniert, aber

import subprocess 
args = [r"C:\Users\MyName\LevelEditor\LevelEditor.exe", "-debugoutput", "debug.txt"] 
subprocess.run(args) 

den Anschluss an docs