2

Python デバッガー (pdb) で単純なラッパーを作成していますが、pdb の出力を解析する必要があります。しかし、プロセス パイプからのテキストの読み取りに問題があります。

私のコードの例:

import subprocess, threading, time

def readProcessOutput(process):
    while not process.poll():
        print(process.stdout.readline())

process = subprocess.Popen('python -m pdb script.py', shell=True, universal_newlines=True,
                           stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
read_thread = threading.Thread(target=readProcessOutput, args=(process,))
read_thread.start()

while True:
    time.sleep(0.5)

OSシェルで特定のコマンド(python -m pdb script.py)を実行すると、次のような結果が得られます。

> c:\develop\script.py(1)<module>()
-> print('hello, world!')
(Pdb)

しかし、スクリプトを実行すると、2 行しか表示されませんが、pdb プロンプトを取得できません。これ以降に stdin にコマンドを書き込んでも効果はありません。だから私の質問は:なぜ私は3行目が読めないのですか?この問題を回避して正しい出力を得るにはどうすればよいですか?

プラットフォーム: Windows XP、Python 3.3

4

1 に答える 1

2

readline()3 行目は、行末までにまだ終了していないため、読み取ることができません。通常、「(pdb)」の後にカーソルが表示され、何かを入力して入力するまでカーソルが表示されます。

何らかのプロンプトを持つプロセスへの通信は、通常、より複雑です。通信のテストを容易にするために、最初にデータライター用の独立したスレッドも作成して、書き込みまたは読み取りが多すぎてもメインスレッドがフリーズしないようにすることがわかりました。その後、再び単純化できます。

于 2012-12-16T03:53:13.967 に答える