7

在循环结构中使用 Python print()(或据我所知,任何其他控制台输出生成)函数并通过R 中的reticulate运行代码,输出仅在执行完成后打印。例如,以下循环在每次迭代后休眠 1.5 秒;循环结束后,运行编号全部打印出来。将 Python 代码保存到单独的 .py 文件然后运行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
")

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

4

2 回答 2

5

显然,您有时需要强制 pyhton 导出标准输出。您可以通过添加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()
")

看这里用 nohup 描述

于 2020-03-18T09:28:06.490 回答
5

为了将来参考,强制通过print(..., flush = True)作品刷新流(如此建议)并渲染导入sys过时:

library(reticulate)

py_run_string("
import time

for i in range(5):
   print(str(i), flush = True)
   time.sleep(1.5)
")
于 2020-03-27T05:46:04.067 回答