首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将值输送到popen3中

如何将值输送到popen3中
EN

Stack Overflow用户
提问于 2014-04-12 03:09:54
回答 1查看 664关注 0票数 2

我想把一些东西输送到命令中。类似于“回声”的东西测试“cmd somearg”。

我的第一个方法是这样写:

代码语言:javascript
复制
Open3.popen3(cmd) do |stdin, stdout, stderr, wait|
  stdin.puts("test")
end

...but,显然这不起作用。

那么,如何将值导入命令(并保留读取stdout/err的可能性)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-12 03:28:15

用这个:

代码语言:javascript
复制
Open3.popen3(cmd) do |stdin, stdout, stderr, wait|
  stdin.puts("test")
  stdin.close
  # unless (err = stderr.read).empty? then raise err end
  stdout.read
end

这里要注意的是,您需要关闭(或者可能刷新) stdin,这样popen3才能将它提供给命令。然后,您可以以简单的方式读取stdout

另外,确保记住文档(Open3#popen3)中的以下摘录:

你应该小心避免死锁。由于管道是固定长度的缓冲区,::popen3 3(“prog”){ much,o,e,t o.read }死锁,如果程序在stderr上生成过多的输出。您应该同时阅读stdout和stderr (使用线程或IO.select)。但是,如果不需要stderr输出,则可以使用::popen2 2。如果合并的stdout和stderr输出不是问题,则可以使用::popen2e。如果您确实需要将stdout和stderr输出作为单独的字符串,则可以考虑::capture3 3。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23025620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档