我不能sys.stdout.seek

I can't sys.stdout.seek

据我所知,sys.stdout 是一个代表终端标准输出的文件。但是,当我尝试使用 sys.stdout.seek 时,无论我给它什么参数,它都会抛出一个错误:

IOError: [Errno 29] Illegal seek

这是怎么回事?是不是我使用的是 TTY 本身而不是像 xterm 这样的虚拟终端?我该如何解决?

当 stdout 是 TTY 时,它是字符设备并且不可搜索,您不能 seek 在 TTY 中。与 tell 相同,未实现:

>>> sys.stdout.tell()
IOError: [Errno 29] Illegal seek

但是,当您将标准流重定向到一个文件时,例如在 shell 中:

$ my program > ouput.txt

现在您可以 seek 来自 stdout,stdout 现在是一个文件。

如果您使用的是 Unix,请查看此参考资料:

Understanding character device (or character special) files