Я не знаю ни одного существующего обобщенного Ruby API для сложных межпроцессных конвейеров / перенаправления. Если бы вы могли предложить хороший API, который вы хотели бы использовать, возможно, я мог бы участвовать в реализации.
ли в Ruby автоматизированный способ создания оболочки? Я пытаюсь преобразовать следующий код оболочки в 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 # для подключения выхода а к входу б? Мой нынешний подход становится довольно громоздким, когда количество фильтров растет.
Я знаю оKernel#system('a | b')
очевидно, но мне нужно смешать фильтры Ruby с внешними программными фильтрами в общем виде.