如何知道stdin是否包含EOF时为空? - python

为了尝试在python中创建一个简单的cat克隆,

sys.stdout.write(sys.stdin.read())

我注意到,这对于包含CTRL + Z EOF / substitude character 0x1a的二进制文件(即python cat.py < binaryfile > supposed_copy)来说非常糟糕,因为这似乎导致read()考虑完成其工作。我不能简单地循环代码来避免这种情况,因为显然stdin.read()会在某个时刻等到提供新的输入为止,一旦达到输入的真正末尾,就永远不会发生。

因此,如何解决此问题,即

如何知道何时完全读取了重定向到stdin的文件,或者
如何正确处理呢?

python大神给出的解决方案

您将需要告诉Python以二进制模式打开stdinstdout。您可以使用-u选项执行此操作。例如

python -u cat.py < binaryfile > supposed_copy

请注意,这将使stdinstdout无缓冲。