ruby - 使用 systemu 而不是 open3 的好处?

标签 ruby

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/

相关文章:

ruby - Redis -Pub\Sub - 连接到 Redis 超时

ruby - 在迁移中从 lambda 指定默认值

ruby - 使用生成器(包括 namespace )创建 Ruby on Rails 3 gem

Ruby 前缀不适用于类方法

ruby-on-rails - 在新浏览器选项卡中打开的 PDF 文档中创建链接

ruby - 如何通过 Ruby 的 FFI 扩展使用 native C 代码的动态缓冲区指针

ruby - 野切 : List attributes name and value?

ruby - 针对单词文件验证输入的最简单方法?

ruby-on-rails - 如何接收从 AWS S3 到 Rails 应用程序的推送通知?

ruby-on-rails - 刚接触Rails,这样的表现正常吗?