Можно передать открытый файл вместо имени файла в библиотеку gzip Python, создав
экземпляр gzip.GzipFile напрямую, вместо использования вспомогательной функции gzip.open. Однако gzip Python нуждается в доступном для поиска файле, и он потерпит неудачу в потоке, используемом подпроцессом.
Способ создания экземпляра GzipFile -
output = gzip.GzipFile(fileobj=pipe.stdout)
Однако это не сработает, так как классу нужен доступный для поиска объект файла. Если у вас нет проблем с ожиданием всех выходных данных подпроцесса и кэшированием данных в памяти, вы можете обойти это с помощью StringIO, например:
import StringIO, subprocess
pipe = subprocess.Popen(["cat bla3.txt | gzip --stdout"], stdout=subprocess.PIPE, shell=True)
helper = StringIO.StringIO()
helper.write(pipe.stdout.read())
helper.seek(0)
output = gzip.GzipFile(fileobj=helper)
Если вы не можете этого сделать, вам придется скопировать некоторый код из gzip.py в Python и обработать данные и вызовы внутреннего zlib самостоятельно.