2

Python スクリプトでコンソール トレース ツールの出力を操作したいと考えています。そのため、ツールが stdout に書き込む各行を読み取り、その行で何かを実行して画面に出力したいと考えています。

私はこのスクリプトを持っています:

import sys

for l in sys.stdin:
    print l

そして、次のようにトレース ツールを開始します。

qspy -c COM7 | my_script.py

問題は、初めてEnterを打ったときです。何も起こりません。Enter キーをもう一度押すと、ツールによって作成されたすべての出力が表示されますが、ツールも終了します (トレース ツールは任意の文字で終了します)。私は何を間違っていますか?

私は窓にいます。


編集:

私はすべての提案を試しましたが、ほとんど成功しませんでした:

まず、stdout に出力を生成するために、この小さなスクリプトを作成しました。

import time

while 1:
    time.sleep(1)
    print "test"

これはまったく機能しません(出力なし):

import sys

for line in sys.stdin:
    print line,
    sys.stdout.flush() 

これも何もしません:

import fileinput, sys

for line in fileinput.input():
    print line,
    sys.stdout.flush()

これは機能しますが、QSPYではなく、テストスクリプトでのみ機能します。

import sys

for line in iter(sys.stdin.readline, ''):
    print line,
    sys.stdout.flush()

私は次のようにスクリプトを呼び出しました:

test.py | python -u my_script.py

また、次のことも行いました。

set PYTHONUNBUFFERED=1
4

1 に答える 1

1

バッファリングを無効にしてみてください:

$ qspy -c COM7 | python -u my_script.py

また、行ごとに強制的に読み取ることもできます。

for line in iter(sys.stdin.readline, '')
    print line,

qspy にバッファリングを管理するオプションがあるかどうかを確認します。

PYTHONUNBUFFERED環境変数を設定することもできます。

于 2012-07-09T17:54:28.217 に答える