网状结构不会实时打印到控制台
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)
")
在循环结构中使用 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)
")