在Windows python3中将stdin作为二进制文件读取

时间:2018-07-17 21:17:59

标签: windows python-3.x stdin file-handling

我有一个代码可以在Linux中将stdin读取为二进制文件:

#! /usr/bin/python3
stdin_file = '/dev/stdin'
def read_input():
    with open(stdin_file, mode='rb') as f:
        while True:
            inp = f.read(4)
            if not inp: break
            print('got :' , inp)

read_input()

对于Windows OS,它可以替代什么? 我不想使用sys.stdin.buffer.read() 考虑一下它,因为我必须像open(file_name)

那样使用它

2 个答案:

答案 0 :(得分:2)

declare const str: string; enqueue(str); // error, might be falsy if (notEmptyString(str)) { enqueue(str); // okay, str is NotEmptyString } sys.stdinsys.stdout都有一个sys.stderr方法,该方法返回其文件描述符编号。 (0、1和2)

在python中,您可以将缓冲区的fileno()用作fileno的路径目标。

此外,就像@eryksun提到的那样,您可能希望在调用open时传递closefd=False,因此退出open时不会关闭sys.stdin的基础文件描述符

例如:

with

答案 1 :(得分:0)

一个不错的选择是使用流的 .buffer 成员来访问二进制版本:

stdin_buffer = sys.stdin.buffer
def read_input():
    while True:
        inp = stdin_buffer.read(4)
        if not inp: break
        print('got :' , inp)

我现在看到您在问题“我不想使用 sys.stdin.buffer.read()”中写道,但仍然决定发布此答案,因为对于遇到此问题的许多其他人来说,这实际上是最好的解决方案,而且很容易错过在您的问题中对它的简短提及(这正是发生在我身上的事情!)。有什么理由不适合你吗?