Python 网状不';t实时打印到控制台

Python 网状不';t实时打印到控制台,python,r,reticulate,console-output,Python,R,Reticulate,Console Output,在循环结构中使用Python的print()(或者据我所知,任何其他生成控制台输出的)函数,并通过R中的networkite运行代码,仅在执行完成后才打印输出。例如,以下面的循环为例,它在每次迭代后进入睡眠状态1.5秒;循环完成后,运行编号全部一次性打印。当将Python代码保存到单独的.py文件中,然后运行netracite::py_run_file()时,同样适用 库(网状) py_运行_字符串(“ 导入时间 对于范围(5)中的i: 印刷品(str(i)) 时间。睡眠(1.5)#睡眠1.5秒

在循环结构中使用Python的
print()
(或者据我所知,任何其他生成控制台输出的)函数,并通过R中的networkite运行代码,仅在执行完成后才打印输出。例如,以下面的循环为例,它在每次迭代后进入睡眠状态1.5秒;循环完成后,运行编号全部一次性打印。当将Python代码保存到单独的.py文件中,然后运行
netracite::py_run_file()
时,同样适用

库(网状)
py_运行_字符串(“
导入时间
对于范围(5)中的i:
印刷品(str(i))
时间。睡眠(1.5)#睡眠1.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()
")

为了将来的参考,强制通过
打印(…,flush=True)刷新流
同样有效(如建议的),并使导入sys过时:

库(网状)
py_运行_字符串(“
导入时间
对于范围(5)中的i:
打印(str(i),flush=True)
时间。睡眠(1.5)
")

这似乎是python的一个问题。当您将其放入脚本并使用
nohup thisscript.py运行它时,您可以看到输出将被保留,直到脚本完成。这是我的经验。不幸的是,我不知道为什么在调用
print()
之后插入
sys.stdout.flush()
确实会在每次迭代时向控制台发送状态更新。谢谢