在Windows中的python中,我想创建两个文件对象,附加到同一个文件(它不必是硬盘上的实际文件),一个用于读取,另一个用于写入,这样,如果读取端尝试读取,它将永远得不到EOF(在写入某些内容之前它只会阻塞)。我认为在Linuxos.mkfifo()中可以完成这项工作,但是在Windows中它并不存在。我们能做些什么?(我必须使用文件对象)。
一些额外的细节:我有一个python模块 ,它通过stdin和stdout(使用RAW)来运行。
class Pusher(Thread):
def __init__(self, source, dest, p1, name):
Thread.__init__(self)
self.source = source
self.dest = dest
self.name = name
self.p1 = p1
def run(self):
while (self.p1.poll()==None) and\
(not self.source.closed) and (not self.source.closed):
line = self.source.readline()
logging.info('%s: %s' % (self.name, line[:-1]))
self.dest.write(line)
self.dest.flush()
exe_to_pythonmodule_reader, exe_to_pythonmodule_writer =\
get_fifo()
pythonmodule_to_exe_reader, pythonmodule_to_exe_writer =\
get_fifo()
p1 = subprocess.Popen(exe, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
old_stdin = sys.stdin
old_stdout = sys.stdout
sys.stdin = exe_to_pythonmodule_reader
sys.stdout = pythonmodule_to_exe_writer
push1 = Pusher(p1.stdout, exe_to_pythonmodule_writer, p1, '1')
push2 = Pusher(pythonmodule_to_exe_reader, p1.stdin, p1, '2')
push1.start()
push2.start()
ret = pythonmodule.play()
sys.stdin = old_stdin
sys.stdout = old_stdout
发布于 2018-08-14 12:22:56
对于跨平台的解决方案,我建议在localhost上的套接字(127.0.0.1)上构建类似文件的对象,这是空闲在默认情况下所做的,以解决与你的问题非常相似的问题。
发布于 2018-08-14 13:37:32
管道是用于通信的进程共享内存的一部分。创建管道的进程是管道服务器。连接到管道的进程是管道客户端。一个进程将信息写入管道,然后另一个进程从管道读取信息。
https://stackoverflow.com/questions/-100005971
复制相似问题