Uruchamianie interaktywnego polecenia z poziomu Pythona
Mam skrypt, który chcę uruchomić z poziomu pythona (2.6.5), zgodnie z poniższą logiką:
Pytaj użytkownika o hasło. Wygląda („Wprowadź hasło:”) (* Uwaga: dane wejściowe nie są wyświetlane na ekranie)Wyprowadzaj nieistotne informacjeMonituj użytkownika o odpowiedź („Blah Blah filename.txt blah blah (T / N) ?:”)Ostatnia linia zachęty zawiera tekst, który muszę przeanalizować (filename.txt). Udzielona odpowiedź nie ma znaczenia (program może się tutaj zamknąć bez podania go, o ile mogę przeanalizować linię)
Moje wymagania sąnieco podobny doZawijanie interaktywnej aplikacji wiersza poleceń w skrypcie Pythona, ale odpowiedzi wydają się nieco mylące, a moje wciąż się zawieszają, nawet jeśli OP wspomina, że nie dla niego.
Rozglądając się, doszedłem do wniosku, żesubprocess
to najlepszy sposób na zrobienie tego, ale mam kilka problemów. Oto moja linia Popen:
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
Kiedy dzwonięread()
lubreadline()
nastdout
, monit jest drukarką na ekranie i zawiesza się.
Jeśli zadzwonięwrite("password\n")
dlastdin
, monit jest zapisywany na ekranie i zawiesza się. Tekst wwrite()
nie jest zapisany (nie przesuwa kursora o nową linię).
Jeśli zadzwonięp.communicate("password\n")
, to samo zachowanie co write ()
Szukałem tutaj kilku pomysłów na najlepszy sposób wprowadzaniastdin
i być może, jak przeanalizować ostatnią linię na wyjściu, jeśli czujesz się hojnie, chociaż prawdopodobnie mógłbym to zorientować.