python-subprocess.Popen stdin.schreiben

Ich bin neu in python und möchte öffnen Sie unter windows eine cmd-Eingabeaufforderung, starten Sie einen Prozess, lassen Sie den Prozess ausführen und dann Befehle zu dem gleichen Laufenden Prozess.

Werden die Befehle ändern so kann ich nicht einfach diese Befehle in die variable cmdline unten. Auch dauert das 10-15 Sekunden zum starten, so dass ich nicht wollen, Zeit zu verschwenden, warten auf den Prozess zu starten und Befehle ausführen jedes mal. will einfach nur zu starten sobald. und führen Sie schnelle Befehle nach Bedarf in den gleichen Prozess

Ich hatte gehofft, zu verwenden subprocess.Popen um diese Arbeit zu machen, aber ich bin offen für bessere Methoden. Beachten Sie, dass mein Prozess zu laufen, ist nicht cmd, aber ich bin einfach mit dieser als Beispiel

import subprocess
cmdline = ['cmd', '/k']
cmd = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE)

cmd.stdin.write("echo hi")       #would like this to be written to the cmd prompt
print cmd.stdout.readline()      #would like to see 'hi' readback

cmd.stdin.write("echo hi again") #would like this to be written to the cmd prompt
print cmd.stdout.readline()      #would like to see 'hi again' readback

Die Ergebnisse sind nicht das, was ich erwarte. Scheint, als ob die stdin.schreiben Sie Befehle, die nicht eigentlich immer in und die readline friert, mit nichts zu Lesen.

Habe ich versucht das popen.communicate() statt schreiben/readline, aber es killt den Prozess. Ich habe versucht Einstellung bufsize in den Popen Linie, aber das hat nicht zu viel Unterschied

Also ich machte einige Fortschritte, aber immer noch nicht genau, was ich will.
Also ich machte einige Fortschritte... machen es den Befehl cmd ein.stdin.write("...\n"), mit dem neue-Zeile wird die Eingabe und lässt den Prozess in der Lage mehrere Befehle in. Nun mein problem ist die Automatisierung der einzelnen Schritte erforderlich. Manuell ausführen, ich Laufe .bat-Datei mit öffnet sich ein cygwin-terminal (mit einem $ - prompt). Ich rufen Sie ein Programm, das ist mehr oder weniger eine tcl-shell (mit % - Eingabeaufforderung). Was ich jetzt noch tun müssen, ist irgendwie der cmd.stdin,schreiben zu imitieren, um mir die Eingabe direkt an die tcl - % - Eingabeaufforderung. das ist, wo ich in jetzt... irgendwelche Ideen?
don ' T Kommentar auf Ihre eigene Frage, die es zu aktualisieren, oder stellen Sie eine neue ein, anstatt (deine Frage gezogen werden sollten, ohne zu Lesen alle Kommentare).
Ich glaube nicht, dass es dauert 10-15 Sekunden zum starten einer neuen cmd auf einem modernen computer. Wenn Sie den tatsächlichen Befehl ist nicht cmd; so zu sagen. Die Pufferung Verhalten hängt stark davon ab, einen bestimmten Teilprozess (wie es interagiert mit seiner stdin/stdout oder ob es nutzt Ihnen überhaupt z.B. ein Unterprozess konnte direkt schreiben, um die Windows-Konsole mittels WriteConsoleW (obwohl, wenn die Ausgabe umgeleitet; sollte es nicht).
ok, heres, was ich versuche zu tun.... Ich habe einige code läuft auf einem Altera FPGA, dass die Gespräche zu meinem Prüfling. Ich brauche verlagern einen großen Teil der Daten aus dem FPGA nach der fertigen Aufnahme aus meinem Prüfling. Ich fand eine nette Funktion innerhalb Altera "system console", die mir erlaubt, schnell schnappen Sie sich diese große Stück, und schreiben eine binäre Datei, die für die Nachbearbeitung. Also das Altera "System Konsole" läuft tcl-Skripten. die hat eine % - Eingabeaufforderung. Im Versuch verwenden Sie popen oder pexpect man, % - Eingabeaufforderung.

InformationsquelleAutor pyNewbie | 2015-05-08

Schreibe einen Kommentar