Gzip, uuencode ve standart çıktıya yazdırmak istediğim bazı verilerim var. Ne temelde var olan:Python Popen, akışları ve çoklu işlemleri kapatma
compressor = Popen("gzip", stdin = subprocess.PIPE, stdout = subprocess.PIPE)
encoder = Popen(["uuencode", "dummy"], stdin = compressor.stdout)
Ben kompresöre verileri beslemek yolu compressor.stdin.write (malzeme) geçer.
Gerçekten yapmam gereken şey, kompresöre bir EOF göndermek ve bunu nasıl yapacağımı bilmiyorum.
Bir noktada compressor.stdin.close() yöntemini denedim, ancak çalışmıyor - kompresör doğrudan bir dosyaya yazdığında iyi çalışıyor, ancak yukarıdaki durumda işlem sonlanmıyor ve compressor.wait() üzerinde duruyor.
Öneriler? Bu durumda, gzip bir örnektir ve gerçekten bir işlemin çıktısını başka bir şeye iletmek için bir şeyler yapmam gerekiyor.
Not: Sıkıştırmam gereken veriler belleğe sığmayacak, bu nedenle iletişim burada gerçekten iyi bir seçenek değil. Ayrıca, sadece yukarıdaki 2 satırdan sonra
compressor.communicate("Testing")
çalıştırırsanız, hala zlib kullanılarak düşünün hata
File "/usr/lib/python2.4/subprocess.py", line 1041, in communicate rlist, wlist, xlist = select.select(read_set, write_set, [])
Cobbal'ın cevabı gzip için çalışacak olsa da, bu aslında sadece bir örnektir - borulara ihtiyacım var ... – bsdfish