You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python关闭sys.stdout后print报ValueError的解决方法求助

问题:关闭重定向的sys.stdout后无法向控制台输出print内容

需求:将部分输出写入out.txt,关闭文件后继续用print('Hello')向控制台输出,但运行报错。

原代码

from selenium import webdriver
from selenium.webdriver.common.by import By 
import sys    

print('getting contests-url')
sys.stdout = open('out.txt', 'w')
find_href = driver.find_elements(By.CLASS_NAME, 'discussionListItem')

for my_href in find_href:
    print(my_href.get_attribute('id'))

sys.stdout.close()
print('Hello')

报错信息

print('Hello')
ValueError: I/O operation on closed file.

原因

你将sys.stdout替换为了文件对象,关闭文件后,print仍会尝试使用这个已关闭的对象,导致报错。同时原代码缺少driver的初始化和网页访问步骤,会引发NameError。

解决方案

方法1:手动保存并恢复原始stdout

手动保存控制台对应的原始标准输出对象,写完文件后恢复回去:

from selenium import webdriver
from selenium.webdriver.common.by import By 
import sys    

# 保存原始控制台输出对象
original_stdout = sys.stdout

print('getting contests-url')
# 重定向输出到文件
sys.stdout = open('out.txt', 'w')

# 初始化driver并访问目标网页(根据你的浏览器调整)
driver = webdriver.Chrome()
driver.get("你的目标网页URL")

find_href = driver.find_elements(By.CLASS_NAME, 'discussionListItem')
for my_href in find_href:
    print(my_href.get_attribute('id'))

# 关闭文件并恢复原始stdout
sys.stdout.close()
sys.stdout = original_stdout

# 现在可以正常向控制台输出
print('Hello')

# 关闭浏览器driver
driver.quit()

方法2:使用contextlib.redirect_stdout(推荐)

利用Python标准库的contextlib.redirect_stdout,自动处理输出重定向和恢复,无需手动操作:

from selenium import webdriver
from selenium.webdriver.common.by import By 
from contextlib import redirect_stdout

print('getting contests-url')

# 上下文管理器自动处理文件打开/关闭,以及stdout的重定向/恢复
with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        driver = webdriver.Chrome()
        driver.get("你的目标网页URL")
        
        find_href = driver.find_elements(By.CLASS_NAME, 'discussionListItem')
        for my_href in find_href:
            print(my_href.get_attribute('id'))

# 上下文结束后,stdout已自动恢复为控制台,直接输出即可
print('Hello')

driver.quit()

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:20:22