systemu 页面说:
systemu can be used on any platform to return status, stdout, and stderr of any command. unlike other methods like open3/popen4 there is zero danger of full pipes or threading issues hanging your process or subprocess.
(https://github.com/ahoward/systemu)
谁能稍微解释一下?
最佳答案
方法 like popen及其各种衍生产品很方便,并且是完整 I/O 库的预期 API 的一部分。
但是,它们很容易出现死锁,所以必须随意使用或谨慎使用。随便,我的意思是,如果您同时从命令中写入和读取,只要您不写入太多或读取不多,它仍然可以。小心,我的意思是,您可以移动大量数据,但前提是您牢记操作的内部细节并有意设计以防止死锁。
想象一下,向您的popened 命令写入大量内容,然后读取结果。如果您写入的内容多于管道将缓冲的内容,那么您的进程将进入休眠状态。在大多数情况下,这在实践中是可以的,但是如果命令必须写很多东西怎么办?现在 它 可能会休眠并且没有完成读取您发送的输入。您不会完成发送输入,因此您永远不会醒来并阅读结果。
僵局!
关于ruby - 使用 systemu 而不是 open3 的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7920990/