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
相关产品推荐
相关产品推荐

