如何在Shell中实时捕获Julia脚本的运行输出?
解决Julia脚本输出重定向后内容不实时写入文件的问题
这是因为Julia默认对标准输出(stdout)启用了缓冲机制——当输出目标不是终端而是文件或管道时,系统会累积一定量的数据才写入磁盘,以此提升IO效率。要实现实时写入,有几种简单的解决办法:
方法1:在脚本内手动刷新输出
每次调用println后,手动调用flush(stdout)强制清空缓冲并写入文件:
println("Hello world!") flush(stdout) # 强制将缓冲内容写入磁盘 sleep(10)
方法2:启动Julia时禁用全局缓冲
用--flush参数启动脚本,这个参数会让所有标准输出自动实时刷新,无需修改原有代码(Julia 1.6及以上版本支持):
$ julia --flush script.jl > output.txt
方法3:通过环境变量关闭缓冲
设置JULIA_STDOUT_UNBUFFERED环境变量为1,强制Julia关闭标准输出的缓冲:
$ JULIA_STDOUT_UNBUFFERED=1 julia script.jl > output.txt
额外说明:如果是标准错误输出(stderr),比如用println(stderr, "xxx")或@warn输出的内容,默认是无缓冲的,重定向后会实时写入文件。
内容的提问来源于stack exchange,提问作者user15546
相关产品推荐
相关产品推荐

