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

Python中stdin读取内容无法写入文件的问题求助

问题分析与解决方案

你的代码存在几个关键问题,导致文件始终为空:

1. 文件关闭操作未执行

file.close 只是引用了方法对象,并没有实际调用关闭操作。必须添加括号写成 file.close(),才能触发文件缓冲区刷新到磁盘的动作,否则写入的内容会滞留在内存中,不会被保存到文件。

2. 数据类型不兼容

  • sys.stdin.buffer.read(12) 返回的是bytes二进制类型,不是字符串。
  • len(rawLength) 是整数,无法直接和字符串 "\n"、bytes对象拼接,这种操作会触发类型错误,导致代码中断,后续写入逻辑根本没机会执行。

修正后的代码

方案1:二进制模式写入(保留原始字节数据)

import sys

# 读取最多12字节的二进制数据
raw_data = sys.stdin.buffer.read(12)
# 用with语句自动管理文件(无需手动close)
with open("my_file.txt", "wb") as file:
    # 先把长度转为字符串再编码成bytes,写入后换行,最后写原始数据
    file.write(f"{len(raw_data)}\n".encode('utf-8'))
    file.write(raw_data)

方案2:解码为字符串后文本模式写入

如果输入是UTF-8编码的文本,可先解码为字符串再处理:

import sys

# 读取二进制数据并解码为字符串
raw_str = sys.stdin.buffer.read(12).decode('utf-8')
with open("my_file.txt", "w", encoding='utf-8') as file:
    file.write(f"{len(raw_str)}\n")
    file.write(raw_str)

关于stdin的补充说明

  • sys.stdin.buffer 是二进制输入流,读取的是原始字节;直接使用 sys.stdin.read() 则是文本流,会自动按系统默认编码完成解码。
  • 使用with语句管理文件是Python的最佳实践,它会在代码块结束时自动关闭文件,避免遗漏缓冲区刷新的问题。
  • read(12) 会让程序阻塞,直到读取到12字节数据,或者输入流结束(比如Unix下按Ctrl+D,Windows下按Ctrl+Z)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:23:18