我试图从简单的WebSockets UI流入/从一个bash shell,但我在重定向IO时遇到问题。我想启动一个bash实例,并将stdout和stdin连接到与我的Web UI交互的write_message()和on_message()函数。这里是什么,我试图做一个简化版本:在Python中的流标准输出/标准输出
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)
虽然庆典似乎开始和ON_MESSAGE不会被调用,我没有得到任何输出。 readline()仍然阻塞。我试过stdout.read(),stdout.read(1)和各种缓冲区修改,但仍然没有输出。我也尝试了在on_message中使用后缀'\ n'的硬编码命令来隔离问题,但是我仍然没有从readline()获得任何输出。
理想情况下,我希望将每个字节实时写入stdout,而不等待EOL或任何其他字符,但我很难找到正确的API。任何指针将不胜感激。
冲洗流帮助吗? –
不,我甚至尝试用sys.stdout.flush()替换一个简单的echo脚本。 – ca4221
这是什么WebSocketHandler? –