首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Python的print()非阻塞?

问如何使Python的print()非阻塞?
EN

Stack Overflow用户
提问于 2021-01-24 22:36:56
回答 1查看 842关注 0票数 3

我正在Rasberry上运行一个Python脚本,它似乎在print()调用上断断续续地冻结。脚本只是偶尔冻结,当有人聚焦于终端并按下"enter“按钮或点击ctrl+c时,脚本才会继续。

我的猜测是,这里的问题是,print()调用正在等待从终端获得某种响应,而当用户做一些意想不到的事情(比如突出显示文本、右键拖动或其他事情(我无法复制)时,它不会得到响应)。为了清楚起见,脚本在本例中无限期挂起,而不是在下面的time.sleep()调用中指定的120秒内挂起。

我的问题是:我是否可以在python中使用任何打印调用,因为它不需要等待从控制台获得响应,这样它就不会在上述未知的情况下冻结?

我已经将我的代码放在下面,尽管它所做的细节与这个问题并不特别相关。

代码语言:javascript
复制
while True:
    directory_pump_files =  glob.glob("./pumplog*.csv") #read in some files from the file system

    for file_path in directory_pump_files:
        try_upload_file(file_path, pump_files_done, "/batchUpload/create") #upload the pump file

        
    directory_log_files =  glob.glob("./log*.csv")

    for file_path in directory_log_files:
        try_upload_file(file_path, log_files_done, "/batchUpload/SensorReadings") #upload the log file
    print ("sleep")
    time.sleep(120)
EN

回答 1

Stack Overflow用户

发布于 2021-01-24 22:50:33

这可能是终端缓冲机制的问题。通常,当遇到换行符时,缓冲区会被刷新,但是在Raspberry Pi上,情况可能会有所不同。

您可以尝试使用flush参数。来自help(print)

打印(.)print(value,.,sep=‘',end='\n',file=sys.stdout,flush=False)默认将值打印到流或sys.stdout。可选关键字参数: file:一个类似文件的对象(流);默认为当前sys.stdout。sep:值之间插入的字符串,默认为空格。end:在最后一个值之后追加的字符串,默认为换行符。冲洗:是否强行冲洗溪流。

通过使用print("sleep", flush=True),将立即打印字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65876753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档