是否有自动方式在Ruby中进行shell管道?我正在尝试将以下shell代码转换为Ruby:
a | b | c... > ...
Run Code Online (Sandbox Code Playgroud)
但到目前为止我找到的唯一解决方案是自己做缓冲管理(简化,未经测试,希望它能得到我的意思):
a = IO.popen('a')
b = IO.popen('b', 'w+')
Thread.new(a, b) { |in, out|
out.write(in.readpartial(4096)) until in.eof?
out.close_write
}
# deal with b.read...
Run Code Online (Sandbox Code Playgroud)
我想我想要的是告诉popen使用现有流而不是创建新流的方法?或者,IO#merge方法将输出连接到b的输入?当滤波器数量增加时,我当前的方法变得相当笨拙.
我明白知道Kernel#system('a | b'),但我需要以通用的方式将Ruby过滤器与外部程序过滤器混合在一起.