使用os.pipe()
创建管道时,它会返回2个文件编号;读取结束和写入结束,可以使用os.write()
/ os.read()
写入和读取表单;没有os.readline()。是否可以使用readline?
import os
readEnd, writeEnd = os.pipe()
# something somewhere writes to the pipe
firstLine = readEnd.readline() #doesn't work; os.pipe returns just fd numbers
简而言之,当你拥有的是文件句柄号时,是否可以使用readline?
答案 0 :(得分:11)
您可以使用os.fdopen()
从文件描述符中获取类似文件的对象。
import os
readEnd, writeEnd = os.pipe()
readFile = os.fdopen(readEnd)
firstLine = readFile.readline()
答案 1 :(得分:4)
将管道从os.pipe()
传递给os.fdopen()
,这应该从filedescriptor构建一个文件对象。
答案 2 :(得分:4)
听起来您想要获取文件描述符(数字)并将其转换为文件对象。 fdopen
函数应该这样做:
import os
readEnd, writeEnd = os.pipe()
readFile = os.fdopen(readEnd)
# something somewhere writes to the pipe
firstLine = readFile.readline()
现在无法对此进行测试,请告诉我它是否无效。
答案 3 :(得分:4)
os.pipe()
返回文件描述符,因此你必须像这样包装它们:
readF = os.fdopen(readEnd)
line = readF.readline()
答案 4 :(得分:1)
我知道这是一个老问题,但这是一个没有死锁的版本。
import os, threading
def Writer(pipe, data):
pipe.write(data)
pipe.flush()
readEnd, writeEnd = os.pipe()
readFile = os.fdopen(readEnd)
writeFile = os.fdopen(writeEnd, "w")
thread = threading.Thread(target=Writer, args=(writeFile,"one line\n"))
thread.start()
firstLine = readFile.readline()
print firstLine
thread.join()