可以在Ruby中为Open3.capture3提供流输入吗?

时间:2015-08-04 07:53:36

标签: ruby stdin spawn

我知道我可以通过

为stdin输入提供一个String Open3.capture3
Open3.capture3 some_cmd, stdin_data: some_string

但是可以像打开文件一样提供类似流的输入吗?

类似

Open3.capture3 some_cmd, in: File.open(filepath)

我知道capture3将其选项传递给Process.spawn并且我已阅读

上的文档

http://ruby-doc.org/core-2.2.0/Process.html#method-c-spawn

但是,在提供输入的背景下,我并没有真正理解它,并且无法找到任何相关的例子。

2 个答案:

答案 0 :(得分:0)

根据Open3文档,使用popen3代替capture3

请注意,对于您的示例,您可能必须生成一个线程来读取流中的输入并将其重定向到open3提供的输入,具体取决于您的流来自何处。

答案 1 :(得分:0)

我已经在http://ruby-doc.org/core-2.2.0/Process.html#method-c-spawn上的STDIN重定向主题上阅读了这篇文章:

pid = spawn(command, :in=>"/dev/null")

Open3的文档说您可以使用spawn定义的属性,因此您应该能够incapture*使用popen3虽然我已经测试了这个,但也是如此。如果它不起作用,仍然有spawn