以下のロジックに従う Python (2.6.5) 内から実行したいスクリプトがあります。
- ユーザーにパスワードを要求します。("パスワードを入力してください: ") のようになります (*注: 入力は画面にエコーしません)
- 無関係な情報を出力する
- ユーザーに応答を求める ("Blah Blah filename.txt blah blah (Y/N)?: ")
最後のプロンプト行には、解析する必要があるテキスト (filename.txt) が含まれています。提供される応答は問題ではありません (行を解析できる限り、プログラムは応答を提供せずにここで実際に終了する可能性があります)。
私の要件は、インタラクティブなコマンドラインアプリケーションをPythonスクリプトでラップすることに多少似ていますが、そこの応答は少し混乱しているように見えます.OPが彼には向いていないと述べていても、私のものはまだハングしています.
周りを見回して、これがsubprocess
最善の方法であるという結論に達しましたが、いくつかの問題があります。これが私のPopenラインです:
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
read()
またはreadline()
を呼び出すとstdout
、プロンプトが画面に表示され、ハングします。write("password\n")
forを呼び出すとstdin
、プロンプトが画面に書き込まれ、ハングします。のテキストwrite()
は書き込まれません (カーソルが新しい行に移動しません)。を呼び出すと
p.communicate("password\n")
、write() と同じ動作になります
stdin
入力する最良の方法と、おそらく出力の最後の行を解析する方法について、ここでいくつかのアイデアを探していました。