У меня есть некоторые данные, которые я хотел бы распечатать, распаковать и распечатать в стандартном формате. Что у меня в основном есть:
compressor = Popen("gzip", stdin = subprocess.PIPE, stdout = subprocess.PIPE)
encoder = Popen(["uuencode", "dummy"], stdin = compressor.stdout)
Подача данных в компрессор осуществляется с помощью compressor.stdin.write (материал).
Что мне действительно нужно сделать, так это отправить EOF в компрессор, и я понятия не имею, как это сделать.
В какой-то момент я попробовал compress.stdin.close (), но это не работает - он работает хорошо, когда компрессор записывает в файл напрямую, но в приведенном выше случае процесс не завершается и останавливается на compressor.wait ().
Предложения? В данном случае gzip является примером, и мне действительно нужно что-то сделать с передачей результатов одного процесса другому.
Примечание: данные, которые мне нужно сжать, не помещаются в память, поэтому обмен данными здесь не очень хороший вариант. Кроме того, если я просто запустите
compressor.communicate("Testing")
после 2 строк выше, он все еще зависает с ошибкой
File "/usr/lib/python2.4/subprocess.py", line 1041, in communicate
rlist, wlist, xlist = select.select(read_set, write_set, [])