网状结构不会实时打印到控制台

reticulate doesn't print to console in real time

在循环结构中使用 Python 的 print()(或据我所知,任何其他控制台输出生成)函数并 运行 通过 reticulate 在 R 中,输出仅在执行完成后打印。例如,以下循环在每次迭代后进入休眠状态 1.5 秒; 运行 数字在循环结束后一次性全部打印出来。将 Python 代码保存到单独的 .py 文件然后 运行ning reticulate::py_run_file().

时同样适用
library(reticulate)

py_run_string("
import time

for i in range(5):
   print(str(i))
   time.sleep(1.5) # sleep for 1.5 sec
")

有谁知道这种行为从何而来,如果可能的话,如何规避它?

显然,有时您需要强制 python 导出标准输出。您可以通过在代码中添加 sys.stdout.flush() 来完成此操作:

library(reticulate)

py_run_string("
import time
import sys

for i in range(5):
   print(str(i))
   time.sleep(1.5) # sleep for 1.5 sec
   sys.stdout.flush()
")

see over here described with nohup

为了将来参考,通过 print(..., flush = True) 强制刷新流也有效(如建议 here)并使导入 sys 过时:

library(reticulate)

py_run_string("
import time

for i in range(5):
   print(str(i), flush = True)
   time.sleep(1.5)
")