在Ruby中有没有自动执行shell管道的方法?我正在尝试将以下shell代码转换为Ruby:
a | b | c... > ...
但到目前为止,我找到的唯一解决方案是自己做缓冲区管理(简化的,未经测试的,希望它能理解我的意思):
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...
我想我正在寻找的是一种告诉popen使用现有流而不是创建新流的方法?或者,使用IO#merge方法将a的输出连接到b的输入?当过滤器的数量增加时,我目前的方法变得相当笨拙。
我显然知道Kernel#system('a | b')
,但我需要以通用的方式将Ruby过滤器与外部程序过滤器混合在一起。
https://stackoverflow.com/questions/4234119
复制相似问题