- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 bash shell 流式传输到简单的 WebSockets UI 或从中流式传输,但我在重定向 IO 时遇到了问题。我想启动一个 bash 实例并将 stdout 和 stdin 连接到与我的 Web UI 交互的 write_message() 和 on_message() 函数。这是我正在尝试做的事情的简化版本:
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_message,但我没有得到任何输出。 readline() 仍然阻塞。我尝试了 stdout.read()、stdout.read(1) 和各种缓冲区修改,但仍然没有输出。我还尝试在 on_message 中使用尾随 '\n' 的硬编码命令来隔离问题,但我仍然没有从 readline() 获得任何输出。
理想情况下,我希望实时流式传输写入标准输出的每个字节,而无需等待 EOL 或任何其他字符,但我很难找到合适的 API。任何指针将不胜感激。
最佳答案
在我看来这行:
line = self.app.stdout.readline()
将阻止 ioloop 运行,因为应用程序将花费大部分时间卡在 readline()
中等待应用程序写入一些输出。要让它工作,您将必须获得进程的 stdin
和 stdout
(还有 stderr
呢?——您需要也捕获它),将它们切换到非阻塞模式,并将它们添加到 ioloop
花费时间循环的文件描述符集中。
关于python - 在 Python 中流式传输标准输入/标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8190648/
我正在尝试将资源/流设置为 Android 中的墙纸。我使用 WallpaperManager 类及其方法 setResource/setStream 来执行此操作。我通常在将图像设置为墙纸之前使用
我正在编写脚本来通过反复取消对象直到 EOF 来处理(非常大的)文件。我想对文件进行分区并让单独的进程(在云中)解开并处理单独的部分。 但是我的分区器并不智能,它不知道文件中 pickle 对象之间的
我正在实现图形表示。 Map>> g = new HashMap<>(); Graph 类中的一个方法是 List> getAllEdges() { List> allEdges = new
我正在通过 MediaCodec 处理实时流,并且有一个场景,其中 MediaFormat 在流中更改(即:正在解码的视频的分辨率发生更改)。鉴于我将解码器附加到 Surface 以在我检测到传入流的
嗨 iCoders 目前我正在开发一个使用 OpenTok/TokBox iOS SDK 进行直播的应用程序。我怀疑有多少订阅者可以订阅发布者发布的流。我在 openTok 论坛中搜索过这个但是没有找
我是一名优秀的程序员,十分优秀!