提问人:Ralf_Reddings 提问时间:11/12/2023 更新时间:11/12/2023 访问量:58
stdin 未保存到文件
stdin is not being saved to file
问:
我试图更好地了解 stdin 的工作原理以及如何在 Python 中专门使用它。
我正在尝试将从 stdin 收到的任何内容保存到文件中。该文件应有两行
- 第一行应该是字符串的字母数
- 第二行应该是字符串本身
rawLength = sys.stdin.buffer.read(12)
file = open("my_file.txt", "w")
file.write(len(rawLength) + "\n" + rawLength) #file.write(rawLength) <== Does not work either
file.close
文件确实被创建,但没有任何反应。它是空的,并且在 Python 程序退出后保持为空。
我试过了这个,果然控制台确实打印了它,如图所示 这里
import time
rawLength = sys.stdin.buffer.read(12) #save std to var
time.sleep(3) #because console window closes too fast
print(len(rawLength))
print(rawLength)
time.sleep(44)
这个练习的重点是增加我对 std 的理解,这样我就可以解决我昨天问的这个问题
任何帮助将不胜感激!
答:
你的基本理念很好,但细节是有缺陷的。请注意这个轻微的重写,使用 而不是 .写入调用无法正常工作,因为混合了整数、Unicode 字符串和字节字符串。这有效:print
file.write
import sys
rawLength = sys.stdin.buffer.read(12)
file = open("my_file.txt", "w")
print(len(rawLength), file=file)
print(rawLength.decode(), file=file)
file.close()
输出:
timr@Tims-NUC:~/src$ python x.py
asdfhlaksjdf
timr@Tims-NUC:~/src$ cat my_file.txt
12
asdfhlaksjdf
timr@Tims-NUC:~/src$
作为一般规则,这不是您在 Python 程序中的使用方式。 趋向于文本,所以我们使用 、 或 或模块。stdin
stdin
sys.stdin.readline
for line in sys.stdin:
fileinput
评论
正如其他一些人所说,您提供的代码本身不起作用,原因如下:
- 您忘记导入
sys
- 您尝试使用带有整数(长度)和字符串的运算符
+
- 打电话时忘记括号
file.close()
修复这些错误后,我能够使用 Python 3.10 成功运行它。这几乎会产生所需的输出,但有一些注意事项。
import sys
rawLength = sys.stdin.buffer.read(12)
file = open("my_file.txt", "w")
file.write(f"{len(rawLength)}\n{rawLength}")
file.close()
通过向函数提供,您可以读取的数据量限制为 12 个字节。这意味着,如果您提供的数据超过 12 个字节,其余部分将丢失。这也意味着,如果您提供的数据少于 12 字节,程序将在写入文件之前等待更多数据。12
sys.stdin.buffer.read
将字符串“This is an example”提供给以下文件后的文件输出:stdin
12
b'This is an e'
注意:以原始数据的形式提供数据,而不是将 因此 why 写入文件。sys.stdin.buffer.read
bytes
str
b'...'
评论
file.close
需要是 .IIRC,如果您不刷新它们或关闭文件,内容可能会卡在缓冲区中。file.close()
len(rawLength) + "\n"
len
with