由于某些原因,在本例中,consumer
似乎被阻塞了(因为它正在等待EOF?)。但是管道的写入端应该是关闭的。
import os, subprocess, threading
(r, w) = os.pipe()
def producer():
print '--producer started'
subprocess.Popen(['echo', '123'], stdout=w).wait()
print '--producer finished'
os.close(w)
print '--write pipe closed'
def consumer():
print '--receiver started'
subprocess.Popen(['cat'], stdin=r).wait()
print '--receiver finished'
os.close(r)
print '--read pipe closed'
threading.Thread(target=producer).start()
threading.Thread(target=consumer).start()
发布于 2018-06-14 07:48:47
你的程序永远不会退出的原因是你在等待cat,除非cat正在等待一个永远不会出现的EOF。
当您调用subprocess.Popen(['cat'], stdin=r).wait()
时,它从文件描述符中读取并将其打印到标准输出,因为您没有重定向标准输出。这就是为什么你仍然在屏幕上看到'123‘的原因。
请考虑以下任一选项:使用队列:
import threading
from Queue import Queue
q= Queue()
def producer():
print '--producer started'
q.put('123')
print '--producer finished'
def consumer():
print '--receiver started'
print q.get()
print '--receiver finished'
threading.Thread(target=producer).start()
threading.Thread(target=consumer).start()
或者使用os.pipe
,但使用read
和write
import os, subprocess, threading
(r, w) = os.pipe()
def producer():
print '--producer started'
os.write(w, '123')
print '--producer finished'
os.close(w)
print '--write pipe closed'
def consumer():
print '--receiver started'
print os.read(r, 3)
print '--receiver finished'
os.close(r)
print '--read pipe closed'
threading.Thread(target=producer).start()
threading.Thread(target=consumer).start()
https://stackoverflow.com/questions/50847096
复制相似问题