最近我一直在搞Popen
。我催生了输出写入TemporaryFile
背景的过程:回调函数处理输出
f = tempfile.TemporaryFile()
p = subprocess.Popen(["gatttool"], stdin = subprocess.PIPE, stdout = f)
现在它在我通过stdin
发送命令到过程和读了一下后临时文件的方式。它是非阻塞的,所以我可以执行其他任务。
问题是,gatttool
有时会生成一些输出自身(例如通知)。我正在寻找一种方法来读取此输出,而不会阻止TemporaryFile
。
我的问题:
1)它是安全的读取从TemporaryFile
(50行输出),并希望subprocess
优雅地等待我来读取数据或将其终止?
2)是否有一种优雅的方式来创建一个回调函数,该函数将在TemporaryFile
上的每个事件上调用(而不是每秒运行一次并读取数据的线程)?
看起来像一个很好的用例命名管道(而不是纯文本文件)。 –
也许:https://docs.python.org/2.2/lib/os-fd-ops.html并使用简单的pipe()? – Melon
个人而言,我喜欢在'sh'模块的子流程中使用更高级别的包装 - 这就是为什么我发布评论而不是编写proprer答案的原因。 –