提问人:Steven Hepting 提问时间:5/28/2021 最后编辑:Martijn PietersSteven Hepting 更新时间:6/5/2021 访问量:89
使用 Ruby IO 混合输入/输出?
Mix input/output with Ruby IO?
问:
我希望编写一个可以与子进程交互的小方法(在本例中),并且应该能够编写命令,并在运行 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
答: 暂无答案
评论
@shell.puts command
不等待命令完成。您的脚本可能在 bash 开始解释和执行它之前完成生成输入。popen3
close
popen
var=3
sleep 2