在没有 communicate() 阻塞行为的情况下写入 Python 子进程的标准输入

Write to a Python subprocess's stdin without communicate()'s blocking behavior

如何将其设为非阻塞调用? osd_cat 仅接受作为 PIPE 的输入,需要 p.communicate() 调用使进程阻塞。有没有其他方法可以在 Popen 中设置 stdin

p = subprocess.Popen(('osd_cat',
                      '-d',
                      '{}'.format(interval)),
                     stdin=subprocess.PIPE)
p.communicate(message)

p.communicate 方法是 one-shot 处理向进程发送数据。

而是直接写入 p.stdin. If you want to get output, you can read lines from p.stdout。确保在尝试读取之前将 stdout=subprocess.PIPE 传递给构造函数。