2017-01-05 4 views
-1

Ich würde gerne wissen, wie ich die Eingabeaufforderung in Python verwenden kann. Hier ist die Sache, ich muss ein Programm ausführen, das Python basiert, und ich habe es in der Eingabeaufforderung getan. Ich muss dieses Programm jedoch mehrfach ausführen und möchte es daher automatisieren. Das Programm muss mit Dateien in einem bestimmten Ordner ausgeführt werden und es verwendet eine Konfigurationsdatei, die sich im selben spezifischen Ordner befindet. Schließlich muss ich auch eine Protokolldatei angeben, sobald alle Prozesse abgeschlossen sind. Früher habe ich all dies in Eingabeaufforderung tun:Laufende Programmaufforderung in Python

C:\Users\Gabriel\Documents\vina_tutorial>"\Program Files (x86)\The Scripps Research Institute\Vina\vina.exe" --config conf.txt --log log.txt 

Ich habe versucht, mit Python:

import subprocess 
subprocess.Popen('C:\\Program Files (x86)\\The Scripps Research Institute\\Vina\\vina.exe -config ' + 'conf.txt', cwd='C:\\Users\\Gabriel\\Documents\\vina_tutorial') 

Es ist jedoch nicht zu funktionieren scheinen. (Ich habe in diesem ersten Schritt die Protokolldatei weggelassen.)

Irgendwelche Tipps, wie man vorgeht oder wo ich etwas darüber lernen kann?

+1

welche Art von Fehler haben Sie erhalten? Haben Sie erwartet, dass 'vina.exe' auf stdout druckt? (Es wird nicht automatisch) – Aaron

+0

Es gibt einen Tippfehler in der 'Popen'-Befehlszeile. '-config' sollte' --config' mit zwei Bindestrichen sein. Sie müssen sich angewöhnen, auf kleine Details zu achten. Sehen Sie die einzelnen Bäume, nicht den Wald. – eryksun

Antwort

1

Sie müssen Ihren Shell-Befehl in separate Argumente aufteilen, die an Popen übergeben werden. Read the documentation

>>> import shlex, subprocess 
>>> command_line = input() 
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'" 
>>> args = shlex.split(command_line) 
>>> print(args) 
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"] 
>>> p = subprocess.Popen(args) # Success! 

Auch können Sie die Schrägstriche in der Windows-Dateipfad entkommen müssen. Sie müssen möglicherweise auch Anführungszeichen setzen IE '"C:\\Program Files (x86)\\etc..\\foo.exe"'

+0

Unter Windows müssen Sie keine Argumentliste verwenden, aber es kann hilfreich sein, wenn Sie Argumente nicht manuell mit Leerzeichen und Escape-Literalzitaten versehen möchten. 'subprocess.Popen' verwendet' subprocess.list2cmdline', um die Windows-Kommandozeilen-Zeichenkette mit richtiger Quotierung und Escaping zu erstellen. Fügen Sie keine zusätzlichen Anführungszeichen manuell hinzu, da sie mit Escapezeichen versehen und als Literalanführungszeichen übergeben werden. – eryksun