数据从标准输入,但它可以是压缩的(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)一样自动。在
目前没有回答
相关问题 更多 >
编程相关推荐