在系统标准在管道传输到子流程之前(例如gzip)

2024-09-27 07:23:18 发布

您现在位置:Python中文网/ 问答频道 /正文

数据从标准输入,但它可以是压缩的(gzip)或未压缩的。在

为了解开这个谜团,我们可以看看流的前4个字节。如果它们等于“\x1f\x8b\x08\x04”,则是gzip压缩文件。在

如果文件确实是压缩的,可以使用以下方法解压缩:

p = subprocess.Popen(['pigz','--stdout','--decompress' , sys.stdin], stdout=subprocess.PIPE)

但是,如果前4个字节已经被占用,pigz将拒绝这个流,因为它不是-a-gzip-compressed-file。在

如何从系统标准没有读过吗?在

或者,如何在不陷入死锁的情况下,向pigz发送正确的前4个字节,然后发送流的其余部分?在

EDIT2:我尝试使用python 3: reading bytes from stdin pipe with readahead中建议的Peeker()类,但是它导致错误:

^{pr2}$

也许我需要创建一个命名管道,将我的四个字节写入其中,然后以某种方式重定向系统标准到那个被命名的管道。请注意,可能会有许多千兆字节的压缩数据传入,因此它必须像Popen(stdin=file_obj)一样自动。在


Tags: 数据标准字节管道系统stdinstdout命名

热门问题