将数据连续发送到子进程

时间:2013-03-23 13:10:43

标签: python-2.7 subprocess inter-process-communicat

我正在测试与子进程的通信。我必须启动服务器,定期发送数据。最终目标是获取气象数据和绘图服务器的过程。采样率是订单或分钟....我写了这两个代码片段,以了解python中ipc的基础知识,但我甚至无法使它们工作。 同步不是问题。

主要流程

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)

主要进程是阻塞,显然sub没有读取 - 发送ACK。 我哪里错了???感谢

1 个答案:

答案 0 :(得分:1)

sys.stdin.read()块的调用,因为它正在尝试读取整个流,因此在流关闭之前无法返回。

尝试使用sys.stdin.readline()并在使用sys.stdout.write()(在两个流程中)进行书写时添加新行,例如: sys.stdout.write('ACK\n')。这应确保读取命令仅在读取单行时才会阻塞。