【问题标题】:sending data continuously to a subprocess连续向子进程发送数据
【发布时间】:2013-03-23 13:10:42
【问题描述】:

我正在测试与子进程的通信。我必须启动一个服务器,定期发送数据。最终目标是获取气象数据的进程和绘图服务器。采样率是数量级或分钟....我编写了这两个代码片段以了解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)

主进程正在阻塞,显然子进程没有读取 - 发送 ACK。 我哪里错了???谢谢

【问题讨论】:

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


    【解决方案1】:

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

    尝试使用sys.stdin.readline() 并在使用sys.stdout.write() 编写时添加换行符(在两个进程中),例如sys.stdout.write('ACK\n')。这应该确保读取命令只会阻塞,直到读取一行。

    【讨论】:

    • 太棒了!有用。这是我在论坛上的第一篇文章,非常有用。谢谢
    • 是的,SO 是最好的。如果您觉得答案有帮助,请随时点赞或接受。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多