Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
ich möchte die Ausgaben eines (externen) Programmes in meinem Python-Programm verwenden und auch was an dieses Programm senden. Also so, als ob ich das Programm im Terminal selber bediene.
from subprocess import Popen, PIPE, STDOUT
import time
p = Popen('/usr/bin/axcall -r -S -R ax0 db0fhn',shell=True,stdout=PIPE,stdin=PIPE)
print (p.stdout.read())
time.sleep(3)
p.stdin.write("q\r")
time.sleep(3)
print (p.stdout.read())
Fragen:
Obwohl das Programm bereits etwas ausgibt (in meinem Fall: ASCII-Text), wird es mit dem ersten print-Befehl nicht angezeigt. Erst bei Auftreten eines Fehlers o.ä. wird der Text angezeigt.
Wie kann ich prüfen, ob das Programm etwas ausgegeben hat, um ggf. andere Aufgaben durchzuführen, wenn das Programm nichts ausgibt?
Gruß
Max
Zuletzt geändert von Octeon am Freitag 15. März 2019, 20:17, insgesamt 1-mal geändert.
`stdout.read` liest so lange, bis das Programm fertig ist. Da es aber auf Eingaben wartet, ist das nie der Fall. Um interaktiv mit einem Programm zu arbeiten, gibt es pexpect.
@Octeon: Wenn Du nicht weisst was Du erwartest, nach welchem Kriterium sendest Du denn dann Deine Eingabe? Drei Sekunden warten ist kein robustes Kriterium. Kann man natürlich trotzdem machen in dem Du auf EOF wartest, was ja nicht kommen dürfte, aber eine Zeitüberschreitung von drei Sekunden setzt (`timeout`-Argument).
Who is General Failure and why is he reading my hard disk?