我試圖從簡單的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? –