管道数据到寻呼机
Piping data to a pager
我在 Ruby 中有一个代码示例,它通过管道将数据传输到寻呼机,以便将其分段打印到 STDOUT:
input = File.read "some_long_file"
pager = "less"
IO.popen(pager, mode="w") do |io|
io.write input
io.close
end
我可以像这样 Crystal 采纳它:
input = File.read "some_long_file"
pager = "less"
Process.run(pager, output: STDOUT) do |process|
process.input.puts input
process.input.close
end
但是,如果我更改 pager = "more"
,Ruby 示例仍然可以正常工作,但 Crystal 片段会转储所有数据,而不是分段提供数据。我该如何解决?
Crystal 0.25.0 [7fb783f7a] (2018-06-11)
LLVM: 4.0.0
默认目标:x86_64-unknown-linux-gnu
more
命令tries to write it's user interface to stderr,所以你也需要转发:
Process.run(pager, output: STDOUT, error: STDERR) do |process|
process.input.puts input
process.input.close
end
由于您正在读取一个长文件,您可能会考虑不将其读入内存,而是将文件描述符传递给管道:
input = File.open("log/development.log")
pager = "more"
Process.run(pager, input: input, output: STDOUT, error: STDERR)
我在 Ruby 中有一个代码示例,它通过管道将数据传输到寻呼机,以便将其分段打印到 STDOUT:
input = File.read "some_long_file"
pager = "less"
IO.popen(pager, mode="w") do |io|
io.write input
io.close
end
我可以像这样 Crystal 采纳它:
input = File.read "some_long_file"
pager = "less"
Process.run(pager, output: STDOUT) do |process|
process.input.puts input
process.input.close
end
但是,如果我更改 pager = "more"
,Ruby 示例仍然可以正常工作,但 Crystal 片段会转储所有数据,而不是分段提供数据。我该如何解决?
Crystal 0.25.0 [7fb783f7a] (2018-06-11)
LLVM: 4.0.0
默认目标:x86_64-unknown-linux-gnu
more
命令tries to write it's user interface to stderr,所以你也需要转发:
Process.run(pager, output: STDOUT, error: STDERR) do |process|
process.input.puts input
process.input.close
end
由于您正在读取一个长文件,您可能会考虑不将其读入内存,而是将文件描述符传递给管道:
input = File.open("log/development.log")
pager = "more"
Process.run(pager, input: input, output: STDOUT, error: STDERR)