我偶然发现了以下代码行
open("|cd lib && /opt/jruby/bin/jruby jasper_pdf.rb") { |input| open("log/jasper_pdf.log", "w") { |f| f.write(input.read) } }
cd命令之前的管道符号是什么?
答案 0 :(得分:2)
Kernel#open
的Ruby文档说:
如果path以管道符开头(" |"),则创建一个子进程, 通过一对管道连接到呼叫者。返回的IO对象可以 用于写入标准输入并从标准读取 此子流程的输出。
在您的情况下,它用于将命令/opt/jruby/bin/jruby jasper_pdf.rb
生成的进程的输出记录到文件log/jasper_pdf.log
。
大致相当于使用Open3
模块,如下所示:
require 'open3'
Open3.popen2e('cd lib && /opt/jruby/bin/jruby jasper_pdf.rb') do |_, output, _|
open('log/jasper_pdf.log', 'w') do |f|
f.write(output.read)
end
end