/ / Interakcia s iným programom príkazového riadku v systéme Python - python, príkazový riadok, subproces

Interakcia s iným programom príkazového riadka v jazyku Python - python, príkazový riadok, subproces

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ď č. 1

Ak 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.