尝试在python中创建一个简单的cat
克隆,
sys.stdout.write(sys.stdin.read())
我注意到这对于包含 CTRL + Z EOF / substitude character 0x1a的二进制文件(即python cat.py < binaryfile > supposed_copy
)来说非常糟糕,因为这似乎会导致read()
考虑其完成的工作。我不能简单地循环遍历代码以避免这种情况,因为很明显在某些时候stdin.read()
将等到提供新输入,一旦达到输入的真正结束将不会发生。
那么,如何解决这个问题,即
stdin
的文件,或答案 0 :(得分:2)
您需要告诉Python以二进制模式打开stdin
和stdout
。您可以使用-u
选项执行此操作。例如
python -u cat.py < binaryfile > supposed_copy
请注意,这会使stdin
和stdout
无缓冲。
答案 1 :(得分:2)
扩展this answer:
if sys.platform == "win32":
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
答案 2 :(得分:1)
有关如何确保将stdin / stdout打开为二进制文件的说明,请参阅Reading binary data from stdin。