打开用于在Python中编写的管道是悬而未决的

时间:2017-05-07 18:13:33

标签: python linux pipe

我有以下示例代码:

#! /usr/bin/python2.7
import os
import errno
FIFO = 'mypipe'

try:
    os.mkfifo(FIFO)
except OSError as oe: 
    if oe.errno != errno.EEXIST:
        raise
    with open(FIFO) as fifo:
        test=fifo.read()
        print("FIFO opened")
        while True:
            print "reading fifo"
            data = fifo.read()
            print "python read"
            if len(data) == 0:
                print("Writer closed")
                break
        print "about to open pipe for writing"
        otherpipe = open('mypipereader', 'r+')
        otherpipe.write('hello back!')

这很好用。实际上,当回显到管道中时,当我尝试打开管道以便在另一个程序中写入时,它会完全按照我的意思在另一个脚本中执行。

THEPIPE = open('mypipe', 'w') THEPIPE.write("hello!")

它继续挂起!曾经有人告诉我,它与内核无法在READING之前打开用于WRITING的管道有关...有什么方法可以解决这个问题吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我正在努力解决这个问题并最终通过首先创建文件描述符解决了我的问题:

import os

fifo = 'my-fifo'
os.mkfifo(fifo)

fd = os.open(fifo, os.O_RDWR) #non-blocking
f = os.fdopen(fd, 'w') #also non-blocking