您的位置:

解决AssertionError("PipeIOStream is not supported on Windows")在tornado出现报错

  发布时间:2023-02-16 21:27:28
报错的原因这个AssertionError是在Tornado的IOStream的代码中出现的,这说明在Windows系统上使用了PipeIOStream这个类。而PipeIOStream类是不支持在Windows系统上运行的,所以产生了这个错误。如果你的应用程序需要使用管道,你可以使用Python的subprocess库来创建和管理管道。还有一种解决方法是使用第三方库例如:pywin32, 这个库兼容windows系统下的使用例子使用TCPIOStream类的例子使用subprocess库的例子使用pywin库的例子请注意,上面的例子只是简单的演示,在实际应用中,需要根据实际需求进行修改。

报错的原因

"PipeIOStream is not supported on Windows"这个AssertionError是在Tornado的IOStream的代码中出现的,这说明在Windows系统上使用了PipeIOStream这个类。而PipeIOStream类是不支持在Windows系统上运行的,所以产生了这个错误。

如何解决

在Windows系统上,可以使用Tornado的其他IOStream子类来替代PipeIOStream,例如TCPIOStream和SSLIOStream。这些类是支持在Windows系统上运行的。

如果你的应用程序需要使用管道,你可以使用Python的subprocess库来创建和管理管道。

还有一种解决方法是使用第三方库例如:pywin32, 这个库兼容windows系统下的pipeIOstream。

使用例子

使用TCPIOStream类的例子:


import tornado.ioloop
import tornado.iostream
import socket

def handle_connection(connection, address):
    stream = tornado.iostream.IOStream(connection)
    stream.write(b"hello, world!")
    stream.close()

if __name__ == '__main__':
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(("", 8888))
    s.listen(5)

    io_loop = tornado.ioloop.IOLoop.current()
    callback = lambda s, a: handle_connection(*a)
    io_loop.add_handler(s.fileno(), callback, io_loop.READ)
    io_loop.start()

使用subprocess库的例子:


import subprocess

p = subprocess.Popen(['cat', 'file.txt'], stdout=subprocess.PIPE)
output, _ = p.communicate()
print(output)

使用pywin32库的例子:


import win32pipe

handle = win32pipe.CreateNamedPipe(r'\\.\pipe\mypipe',
                                   win32pipe.PIPE_ACCESS_DUPLEX,
                                   win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_READMODE_MESSAGE | win32pipe.PIPE_WAIT,
                                   1, 65536, 65536,
                                   300,
                                   None)

请注意,上面的例子只是简单的演示,在实际应用中,需要根据实际需求进行修改。