3

サブプロセスとの通信をテストしています。サーバーを起動して、定期的にデータを送信する必要があります。最終的なターゲットは、気象データを取得するプロセスとプロット サーバーです。サンプリングレートはオーダーまたは分です.... Pythonでipcの基本を理解するためにこれら2つのコードフラグメントを書きましたが、それらを機能させることさえできません。シンクロニズムは問題ではありません。

メインプロセス

import sys, time
from subprocess import Popen, PIPE

print 'starting'
proc = Popen (['python.exe',
    'C:\Documents and Settings\Administrator\Desktop\sub.py'], 
                stdin = PIPE, stdout = PIPE)
print 'launched'

w = 0
while True:
    w += 1 
    time.sleep (2)
    print 'writing', w
    proc.stdin.write (repr(w))
    proc.stdin.flush()
    print proc.stdout.read()

サブプロセス:

import sys, time

print 'reading'
v = 0
while True:
    v = sys.stdin.read()
    sys.stdout.write('ACK')
    sys.stdout.flush ()
    time.sleep (4)

メイン プロセスがブロックされており、明らかにサブプロセスが ACK の読み取りと送信を行っていません。どこが間違っていますか??? ありがとう

4

1 に答える 1

1

ブロックの呼び出しは、ストリーム全体sys.stdin.read()を読み取ろうとしているため、ストリームが閉じられるまで戻ることができません。

(両方のプロセスで)sys.stdin.readline()を使用して書き込む場合は、を使用して改行を追加してみてください。これにより、読み取りコマンドが1行が読み取られるまでのみブロックされるようにする必要があります。sys.stdout.write()sys.stdout.write('ACK\n')

于 2013-03-23T13:47:10.207 に答える