如何在Python中实现“cat”

如何在Python中实现“cat”,python,pipe,Python,Pipe,谁能给出一个用Python实现的cat的工作示例?该程序应从标准输入中读取,并写入标准输出。我的问题是:如何从stdin中读取不一定以换行符终止的所有剩余数据?我应该使用非阻塞IO、关闭缓冲还是执行其他操作 C.执行: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/time.h> #include <sys/select.h> int

谁能给出一个用Python实现的cat的工作示例?该程序应从标准输入中读取,并写入标准输出。我的问题是:如何从stdin中读取不一定以换行符终止的所有剩余数据?我应该使用非阻塞IO、关闭缓冲还是执行其他操作

C.执行:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/select.h>

int main()
{

    fd_set set;
    struct timeval timeout;

    FD_ZERO(&set);
    FD_SET(0, &set);

    timeout.tv_sec = 10;
    timeout.tv_usec = 0;

    char buf[1024];

    while (1) {
        select(FD_SETSIZE, &set, NULL, NULL, &timeout);
        int n = read(0, buf, 1024);
        if (n == 0) {
            exit(0);
        }
        write(1, buf, n);
    }

    return 0;
}

预期结果:通过管道将测试程序连接到cat.py应每0.2秒输出一个数字。结果与内置cat或上面的C实现一样。

好吧,这不是很痛苦

import os
import select
import sys

while True:
    ready, _, _ = select.select([sys.stdin], [], [], 0.0)
    if sys.stdin in ready:
        data = os.read(sys.stdin.fileno(), 4096)
        if len(data) == 0:
            break
        os.write(sys.stdout.fileno(), data)

我认为您应该尝试使用内置python sys库import sys data=sys.stdin.read和sys.stdout通常,echo从stdin读取并写入stdout。cat将从文件中读取并写入标准输出。只需搜索如何在Python中读取文件。@TusharNiras sys.stdin.read返回一个str。它们也可以处理字节吗?默认情况下,标准流处于文本模式。要向这些文件写入或读取二进制数据,请使用底层二进制缓冲区。例如,要将字节写入stdout,请使用sys.stdout.buffer.writeb'abc'@TusharNiras对sys.stdin.buffer调用什么方法?读、读或读其他东西?
import os
import select
import sys

while True:
    ready, _, _ = select.select([sys.stdin], [], [], 0.0)
    if sys.stdin in ready:
        data = os.read(sys.stdin.fileno(), 4096)
        if len(data) == 0:
            break
        os.write(sys.stdout.fileno(), data)