假设我有一个计算难题的方法(可能是在一个巨大的图中进行深度优先搜索),我们可以调用这个方法dfs(graph)
。
此方法还使用stdout
输出到达puts result
每个结果。
def dfs(graph)
while true
# lots of computation
result = something_reached
puts result
end
end
我想在shell中显示进度条以显示计算正在运行,所以我添加了一个这样的实例:
pbar = ProgressBar.create(title: "Computing", starting_at: 1, total: nil)
和进度条状态必须在计算运行时更新(pbar.increment
)。
在shell中,我执行我的程序:
ruby dfs.rb > dfs_results.txt
问题:
将pbar
刷新为stdout
,以便将prograss-bar重定向到dfs_results.txt
,并且计算结果不会存储在此文件中。
如果没有pbar
结果,数据会按预期存储在文件中,但显然没有进度条。
我知道结果可以使用File.open
使用存储,但最好使用shell重定向。
问题:
我应该如何实现将计算结果刷新到dfs_results.txt
文件并显示进度条以保持用户的执行进度?
答案 0 :(得分:1)
只需打开一个文件即可登录:
log = File.open('dfs_results.txt', 'w')
# write into log file
log.write(result)
你的进度条仍然写入stdout。当您打开第二个屏幕时,您可以按照输出:
tails -f dfs_results.txt
更新:或者您可以使用stdout作为进度条,使用stderr作为脚本的输出。而不是puts result
写:
$stderr.puts results
并使用以下命令启动脚本:
ruby dfs.rb 2> dfs_results.txt
我仍然认为第一个版本更好,因为结果不是错误...