我试图将bashshell流式传输到一个简单的WebSockets UI中,但在重定向IO时遇到问题。我想启动bash的一个实例,并连接stdout和stdin来编写与我的webui交互的函数。下面是我要做的简化版本:class Handler(WebSocketHandler):
def open(self):
print "New connection opened."
self.app = subprocess.Popen(["/bin/bash", "--norc", "-i"], stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=False)
thread.start_new_thread(self.io_loop, ())
def on_message(self, message):
self.app.stdin.write(message)
def on_close(self):
self.app.terminate()
def io_loop(self):
while self.app.poll() is None:
line = self.app.stdout.readline()
if line:
self.write_message(line)
虽然bash似乎启动了并且on_消息确实被调用了,但我没有得到任何输出。readline()仍处于阻塞状态。我试过了标准读(), 标准读(1) ,以及各种缓冲区修改,但仍然没有输出。我也尝试过在on_消息中使用尾随的'\n'对命令进行硬编码以隔离该问题,但仍然没有从readline()获得任何输出。在
理想情况下,我希望实时地流化写入stdout的每个字节,而不等待EOL或任何其他字符,但我很难找到合适的API。如有任何建议,我们将不胜感激。在