Python 网状不';t实时打印到控制台
在循环结构中使用Python的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秒
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()
确实会在每次迭代时向控制台发送状态更新。谢谢