使用 Ruby IO 混合输入/输出?

Mix input/output with Ruby IO?

提问人:Steven Hepting 提问时间:5/28/2021 最后编辑:Martijn PietersSteven Hepting 更新时间:6/5/2021 访问量:89

问:

我希望编写一个可以与子进程交互的小方法(在本例中),并且应该能够编写命令,并在运行 Ruby 文件时让这些命令将它们的 outback 打印回我的 shell。bash

到目前为止,我可以用这段代码做类似的事情:

require 'io/console'
@shell = IO.popen('/bin/bash', 'w')
def run(command)
  puts command
  @shell.puts command
  puts 'Done'
end
run 'var=3'
run 'echo $var'
run 'sleep 2'
run 'ls docs'

@shell.close

然后,当我运行此代码时,首先打印所有 Ruby 代码,然后才打印任何 shell 代码:

var=3
Done
echo $var
Done
sleep 2
Done
ls docs
Done
3
<ls output>

我试图阅读一些测试,因为我几乎可以肯定存在一种非常简单的方法来与这样的子进程进行交互,并使输出与正在运行的命令内联:https://github.com/ruby/io-console/blob/master/test/io/console/test_io_console.rbio/console

Ruby io 控制台

评论

0赞 Todd A. Jacobs 5/28/2021
也许你想要 #popen3
0赞 Stefan 5/28/2021
@shell.puts command不等待命令完成。您的脚本可能在 bash 开始解释和执行它之前完成生成输入。
0赞 Steven Hepting 5/28/2021
@ToddA.Jacobs 你有没有一个例子,我可以继续向同一个人发送命令并实时显示输出?popen3
0赞 Steven Hepting 5/28/2021
@Stefan我可以等到 shell 才能看到打印出来的输出。有没有办法等待每个命令后返回的对象?closepopen
0赞 Stefan 5/29/2021
@StevenHepting但等什么? 不生成任何输出,也不生成 .var=3sleep 2

答: 暂无答案