【Python-延迟/阻塞ERROR】运行Python脚本时,print函数输出延迟问题

运行Python脚本时,print函数输出延迟问题

1. 问题描述

最近在写了python爬虫时,用print函数输出进行调试,在通过selenium调用chromedriver.exe运行时,遇到一个很讨厌的问题,就是print的输出被延迟了,类似下面这样:

import io
import random
import re
import sys
import time
import os
from datetime import datetime

import pandas as pd
import xlwt
from pyquery import PyQuery as pq
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.support.ui import WebDriverWait

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')  # 痛苦的根源

print("你好")
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
html = driver.page_source  # 获取页面数据
print(html)

正常情况下,应该先输出“你好”,然后再访问百度页面,也就是first print要先于second print出现再控制台,但实际的情况却是,过了好一会,等程序运行快结束时,两个print才一起输出,特别遇到调用多个方法,访问时间边长时,延迟的更久,这是不正常的。

2. 解决办法

这是个小问题,却非常的烦人,痛苦的根源是我代码开始时启用了stdout缓冲,当时是为了解决另一个BUG启用的,
真是填了一坑又来一坑。
解决的办法有两种:
1. 一种是用命令行参数-u启动python,禁用stdout缓冲

python3 -u test.py  # 改成你的Python文件名称

2. 注释掉上面那段代码

# 注意开启此项时会造成print数据阻塞,注释掉
# sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')

3. 参考文章

https://blog.csdn.net/u012973744/article/details/18825123
https://blog.csdn.net/lmb1612977696/article/details/78648148

猜你喜欢

转载自blog.csdn.net/Artificial_idiots/article/details/121493891