zoukankan      html  css  js  c++  java
  • python输出缓冲区的问题

      碰到的问题,一段代码,print在前,log的在后,查看日志中log的反而在前面。是python输出缓冲区的问题。

      python输出缓冲区要满 4k 才写入文件,除非禁用缓存或者强制输出或者程序结束。中途 ctrl+c 中断会丢失一些输出。

    #!/usr/bin/python
    #coding=utf-8
    '''
    暂停1s输出
    '''
    
    import time
    
    def printStar(n):
            for i in range(n):
                    print " * ",
                    time.sleep(1)
    
    if __name__ == '__main__':
            printStar(10)

      等待10s后一次性输出:

      * * * * * * * * * *

    #!/usr/bin/python
    #coding=utf-8
    '''
    暂停1s输出
    '''
    
    import time
    import sys
    
    
    def printStar(n):
            for i in range(n):
                    print " * ",
                    sys.stdout.flush()
                    time.sleep(1)
    
    if __name__ == '__main__':
            printStar(10)

      则是一秒钟输出一个*

      python程序stdout会先输出到缓冲区,等缓冲区满或者脚本结束再输出,而stderr不会先输出到缓冲区。print 会调用 sys.stdout 的 write 方法。

      解决的办法:

      1、运行时加-u参数,如 # python -u test.py 

      2、在不要缓冲的每一次print后面添加sys.stdout.flush()函数

      3、添加环境变量 PYTHONUNBUFFERED=1

  • 相关阅读:
    Systemd 入门教程:实战篇
    Systemd 入门教程:命令篇
    awk详解
    yum Multilib version problems
    Oracle ORA 12541 报错解决过程
    创建表空间
    大文件按行分离脚本
    heartbeat安装与配置
    Keepalived安装配置
    速查表的名称和建表语句
  • 原文地址:https://www.cnblogs.com/lnlvinso/p/8992839.html
Copyright © 2011-2022 走看看