我希望能在Python中生成一个进程并实现双向通信。当然,Pexpect可以做到这一点,也是我可能会选择的一种方法。但是,它并不完全理想。
我的理想情况是有一种跨平台的通用技术,只涉及标准的Python库。Subprocess非常接近,但是必须等待进程终止才能安全地与其交互,这是不可取的。
查看文档,它确实说有stdin、stdout和stderr文件描述符,我可以直接操作,但有一个大大的警告说“不要这样做”。不幸的是,它并不完全清楚为什么存在这个警告,但从我从谷歌上了解到的信息来看,它与操作系统缓冲有关,如果那些内部缓冲失败时,可能会编写出意外死锁的代码(顺便说一下,任何展示错误方式和正确方式的示例都将不胜感激)。
因此,冒着代码潜在死锁的风险,我认为使用轮询或选择(interactive read)从运行中的进程中读取数据而不杀死它可能很有趣。虽然我失去了(我认为)跨平台的能力,但我喜欢它不需要额外的库的事实。但更重要的是,我想知道这样做是否明智。我还没有尝试过这种方法,但我担心可能会有一些捉摸不透的问题,可能会破坏我的程序。它能行吗?我应该测试什么?
在我的具体情况中,我并不真正关心能否向进程写入数据,只需要反复从中读取数据。此外,我不希望我的进程转储大量文本,所以我希望避免死锁问题,但我想知道这些限制是什么,并能编写一些测试来查看何时会出现问题。
我的理想情况是有一种跨平台的通用技术,只涉及标准的Python库。Subprocess非常接近,但是必须等待进程终止才能安全地与其交互,这是不可取的。
查看文档,它确实说有stdin、stdout和stderr文件描述符,我可以直接操作,但有一个大大的警告说“不要这样做”。不幸的是,它并不完全清楚为什么存在这个警告,但从我从谷歌上了解到的信息来看,它与操作系统缓冲有关,如果那些内部缓冲失败时,可能会编写出意外死锁的代码(顺便说一下,任何展示错误方式和正确方式的示例都将不胜感激)。
因此,冒着代码潜在死锁的风险,我认为使用轮询或选择(interactive read)从运行中的进程中读取数据而不杀死它可能很有趣。虽然我失去了(我认为)跨平台的能力,但我喜欢它不需要额外的库的事实。但更重要的是,我想知道这样做是否明智。我还没有尝试过这种方法,但我担心可能会有一些捉摸不透的问题,可能会破坏我的程序。它能行吗?我应该测试什么?
在我的具体情况中,我并不真正关心能否向进程写入数据,只需要反复从中读取数据。此外,我不希望我的进程转储大量文本,所以我希望避免死锁问题,但我想知道这些限制是什么,并能编写一些测试来查看何时会出现问题。