Seite 1 von 1

Verständnisproblem: Ein-/Ausgabe von Programmen mit Popen ?

Verfasst: Freitag 15. März 2019, 20:10
von Octeon
Hallo Spezialisten,

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.

Mein Code:

Code: Alles auswählen

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

Re: Verständnisproblem: Ein-/Ausgabe von Programmen mit Popen ?

Verfasst: Freitag 15. März 2019, 20:14
von Sirius3
`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.

Re: Verständnisproblem: Ein-/Ausgabe von Programmen mit Popen ?

Verfasst: Freitag 15. März 2019, 21:24
von Octeon
Ok, aber wenn ich nicht weiß, was ich "expecten" soll, denn da kann im Prinzip alles kommen....

Re: Verständnisproblem: Ein-/Ausgabe von Programmen mit Popen ?

Verfasst: Freitag 15. März 2019, 21:39
von __blackjack__
@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).