Einfache Windows-Beispiel für die Automatisierung ein .exe-Programm verwenden Teilprozess und .Popen

Ich bin neu auf dem subprocess-Modul, und nach dem Lesen der Python-Dokumente unter vielen anderen websites (einschließlich Stack-Überlauf), ich bin kämpfen, um zu finden, vereinfachte Beispiele von .Popen, .communicate und weitere nützliche Klassen. Oft sind die Beispiele verwenden Sie niemals jede Klasse in Folge, nur auf Ihre eigenen. Auch viele Beispiele sind Linux-basiert, wie der Einsatz von ["ls", "-l"], das macht es ziemlich schwer zu verstehen, für Windows-Nutzer.

Nach mehreren Stunden spielen mit diesem Modul, ich traf auf mehrere Fragen, die sein könnte am besten durch die Methode der öffnung und der Kommunikation mit einem einfach .exe-Befehlszeile-Programm.

Zum Beispiel, sagen, dass das Programm heißt "numbers.exe" und es fragt folgende Fragen:

>>> Question 1) Choose 1, 2 or 3
>>> Question 2) Choose 4, 5 or 6
>>> You have answered #(Q1) and #(Q2)
>>> *Use these values in an iterative sequence displaying each stage in the iteration*

Ich dann manipulieren wollen dieses Programm automatisch, d.h. ich möchte python an Eingang 2 und 6, ohne dass ich etwas dafür tun, aber immer noch drucken Sie das Fragen. Dann möchte ich in der Lage sein, die iteration in python.

Die erste überlegung ist hier, dass ich verwenden könnte:

from subprocess import Popen, PIPE

numprog = subprocess.call('numbers.exe')
print(numprog.communicate())

Jedoch, das nur öffnet sich das Programm, und ich würde immer noch zu geben 2 und 6 mich. Um den Prozess zu automatisieren, ich glaube, ich muss verwenden Popen neben stdin, stdout und stderr. Dies ist, wo ich Probleme. Ich verstehe, ich muss verwenden Sie Popen zu beginnen, die Kommunikation mit dem input (stdin), output (stdout) und die Fehler (stderr) Rohre:

from subprocess import Popen, PIPE

numcomms = Popen('numbers.exe', stdout=PIPE, stdin=PIPE, stderr=PIPE)

Ich bin nicht sicher, was zu tun ist von hier. Mit numcomms.stdout.read() bewirkt, dass das Programm nur Verweilen, und mit numcomms.stdin.write(2) wirft einen Fehler raus, dass int-Werte verwendet werden können. Die numprog.communicate Klasse zu verlangen scheint Sie zu geben Sie die Werte selbst.

Von dem, was ich sehen kann, ist die pseudo-code wäre entlang der Linien:

>>> Open numbers.exe stdin, stdout and stderr pipes using Popen
>>> Print first question using stdout
>>> Enter "2" using stdin
>>> Print second question using stdout
>>> Enter "6" using stdin
>>> Receive a string saying "You have answered 2 and 6" using stdout
>>> Display the results of each stage of the iteration using stdout

Wie würde ich mich über dies zu schreiben?

Wirklich dankbar für die Hilfe, vielen Dank!

Bearbeiten: Bearbeitet die Frage, zu beschreiben die iterative Sequenz Problem. Michael hat vorgeschlagen, eine gute Auflösung für die Eingabe von Thema, aber ich habe Probleme beim drucken der Ergebnisse der iteration.

InformationsquelleAutor Bixx | 2013-07-14
Schreibe einen Kommentar