首页 > 分享 > pythonunbuffered=1

pythonunbuffered=1

最新推荐文章于 2023-01-12 17:47:09 发布

weixin_39583029 于 2020-12-15 22:20:01 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

1. 前言

以前写python脚本输出日志的时候,经常看到日志文件没有及时输出日志。这里进行总结一下。

2.例子:

以下例子是在Python-3.7.4环境下操作

例子1:

确保当前环境变量PYTHONUNBUFFERED为空

$ export PYTHONUNBUFFERED=""

新建testoutput.py

#!/usr/bin/python

# coding=utf-8

import sys

sys.stdout.write("stdout1 ")

sys.stderr.write("stderr1 ")

sys.stdout.write("stdout2 ")

sys.stderr.write("stderr2 ")

执行结果:

$ python3 testoutput.py

stderr1 stderr2 stdout1 stdout2

可以标准错误stderr是直接输出,无缓冲。 而标准输出stdout是行缓冲,而这里没有换行,等到缓存区满了之后,再输出。

例子2:

确保当前环境变量PYTHONUNBUFFERED为空

$ export PYTHONUNBUFFERED=""

新建testoutput2.py

#!/usr/bin/python

# coding=utf-8

import sys

sys.stdout.write("stdout1n")

sys.stderr.write("stderr1n")

sys.stdout.write("stdout2n")

sys.stderr.write("stderr2n")

执行结果:

$ python3 testoutput2.py

stdout1

stderr1

stdout2

stderr2

跟例子2的区别仅仅是多加了个换行"n",标准输出stdout就会及时输出。

例子 3:

确保当前环境变量PYTHONUNBUFFERED为空

$ export PYTHONUNBUFFERED=""

新建一个first.py 文件

#!/usr/bin/python

# coding=utf-8

import subprocess

print('第1行输出')

subprocess.run("echo 第2行输出", shell=True, check=True)

print('第3行输出')

结果:

$ python3 first.py

第1行输出

第2行输出

第3行输出

而当我们进行重定向的时候会怎样呢?

$ python3 first.py > result.txt

-bash-4.1$ cat result.txt

第2行输出

第1行输出

第3行输出

在这里可以看出print不是及时输出的,如果重定向文件,标准输出stdout和标准错误stderr进行缓存,等缓存区满了以后,再整体输出。

3.怎么及时输出呢?

设置环境变量 export PYTHONUNBUFFERED=1,可以加到用户环境变量中去。

执行python脚本的时候加上参数-u

4.啥时候需要缓存呢?

主要是为了降低io操作,比如写大文件,就可以进行缓存。

方法如下:

设置环境变量 export PYTHONUNBUFFERED=

.执行python脚本的时候不要加上参数-u

5.补充下-u参数说明:

对于3.7以上版本: 标准输出stdout和标准错误stderr全部采用unbuffered

Changed in version 3.7: The text layer of the stdout and stderr streams now is unbuffered.

相关知识

数学数列[1*1/(1*1
1+1=1; 1+2=1; 3+4=1(绝了!)
分享:1+1=1;1+2=1;3+4=1……
153 = 1*1*1 + 5*5*5
运行如下程序段: x=1 y=1 z=1 For j=1 To
(1
【数学归纳法证明1/n+1+1/n+2+1/n+3+...+1/3n>9/10n>=21)当n=2时,左=1/3+1/4+1/5+1/6=57/60>54/60=9/10,成立.(2)假设n=k时,有1/(k+1)+1/(k+2)+...+1/3k>9/10那么1/(k+2)+1/(k+3)+...+1/3(k+1)=[1/(k+1)+1/(k+2)+...+1/3k]+1/(3k+1)】
中国红1苗1花
0=1
LeetCode 1

网址: pythonunbuffered=1 https://m.huajiangbk.com/newsview1125716.html

所属分类:花卉
上一篇: 使用frp内网穿透,用windo
下一篇: go env