Musím napísať Python skript, ktorý môže bežaťiný program príkazového riadku a interaguje s ním stdin a stdout streams.V podstate, Python skript bude čítať z cieľového programu príkazového riadku, inteligentne reagovať písaním na jeho stdin, a potom si znova prečítajte výsledky z programu. to opakujte.)
Pozrel som sa do modulu podprocesov a nemôžem to urobiť, aby som to urobil čítať / písať / čítať / písať vec, ktorú hľadám .. Je tu ešte niečo, čo by som mal skúšať?
odpovede:
6 pre odpoveď č. 1Ak chcete vykonať takú detailnú interakciu (keď mimo vášho riadenia môže druhý program ukladať do pamäte svoj výstup, pokiaľ si nemyslí, že hovorí s terminálom) potrebuje niečo podobné pexpect - čo naopak vyžaduje pty
, štandardný modul knižnice spoločnosti Python, ktorý (na operačných systémoch, ktoré to umožňujú, ako napríklad Linux a Mac OS x) implementuje "pseudo-terminály".
Život je ťažší v systéme Windows, ale možno tento zipfile môže pomôcť - malo by to byť prístavom pexpect
do systému Windows (ospravedlňujem sa, nemám žiadny systém Windows, ktorý by ho mohol skontrolovať). Dotknutý projekt nazvaný wexpect
, životy tu.
3 pre odpoveď č. 2
pozri otázku wxPython: Ako vytvoriť okno bash shell?
tam som dal úplnú interakciu s bash shell čítanie stdout a stderr a komunikácia cez stdin
hlavnou časťou je rozšírenie tohto kódu
bp = Popen("bash", shell=False, stdout=PIPE, stdin=PIPE, stderr=PIPE)
bp.stdin.write("lsn")
bp.stdout.readline()
ak čítame všetky dáta, zablokuje sa, takže odkaz na skript, ktorý som dal, to robí vo vlákne. To je úplná aplikácia wxpython napodobňujúca bash shell čiastočne.