2016-06-02 11 views
0

Ich bin neu in Python, und ich habe eine Engine in bash (die ihre eigenen einzigartigen Befehle von einer Befehlszeile oder einer Datei nimmt und eine bestimmte Funktionalität ausübt). Ich möchte es über Python subprozessieren.Subprozess in Python 2.7 - Befehle in eine Engine ausgeben

Ich bin in der Lage, öffnen Sie die Engine mit subprocess.call(path, shell=True), und manuell interagieren mit ihm/Eingabe-Befehle, aber ich kann nicht herausfinden, wie die einzigartigen Befehle in die Engine über Python eingeben, um die Ausgaben automatisch zu sehen. Ich habe versucht, die gesamte Dokumentation zu verstehen, aber es ist so, so ausführlich.

Idealerweise würde ich gerne alle meine Eingabebefehle in Python schreiben, die Engine sub-verarbeiten und die Ausgabe meiner Engine in der Python-Ausgabe sehen.

Wieder, verzeih mir, wenn das klingt verwirrend. Zum Beispiel habe ich versucht:

p = subprocess.Popen(path-to-engine, stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True) 
p.stdin.write("some commands") 
p.stdout.readline() 
p.kill() 

aber das gibt mir nur Ausgang Code 0 und keine Ausgabe.

Antwort

0

sollten Sie .communicate() anstelle von .kill():

import subprocess 
p = subprocess.Popen(
    path_to_engine, 
    stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    shell=True) 
p.stdin.write("some commands\n") 
stdout, stderr = p.communicate() 

print('stdout:') 
print(stdout) 
print('stderr:') 
print(stderr) 
+0

Vielen Dank für Ihre Antwort; es scheint jedoch, der Prozess wird nach 'p.communicate()' – boldbrandywine

+0

@boldbrandywine: 1-pass die Eingabe mit 'input' Parameter:' p.communicate (input = "einige Befehl") '2-' p .communicate() 'wartet darauf, dass der Kindprozess beendet wird, dh, benutze es nicht, wenn du eine dynamische Eingabe übergeben möchtest, die von den Antworten des Subprozesses abhängt. Wahrscheinlich möchten Sie in diesem Fall das Modul "Pexpect" (http://stackoverflow.com/q/7897202/4279) – jfs