我有一些数据,我想gzip,uuencode,然后打印到标准输出。我基本上有:Python Popen,关闭流和多个进程
compressor = Popen("gzip", stdin = subprocess.PIPE, stdout = subprocess.PIPE)
encoder = Popen(["uuencode", "dummy"], stdin = compressor.stdout)
我给压缩机提供数据的方式是通过compressor.stdin.write(东西)。
我真的需要做的是发送一个EOF到压缩机,我不知道该怎么做。
在某些时候,我尝试了压缩机.stdin.close(),但不起作用 - 它压缩机直接写入文件时效果很好,但在上述情况下,过程不会终止并且在compressor.wait()上停顿。
对此提出建议?在这种情况下,gzip就是一个例子,我真的需要将一个进程的输出管道连接到另一个进程。
注:我需要压缩的数据不适合内存,所以在这里沟通并不是一个好的选择。另外,如果我只是运行
compressor.communicate("Testing")
上面的两行之后
,它仍然与错误
File "/usr/lib/python2.4/subprocess.py", line 1041, in communicate rlist, wlist, xlist = select.select(read_set, write_set, [])
尽管cobbal的答案将适用于gzip,但这实际上只是一个例子 - 我确实需要管道... – bsdfish 2009-03-06 00:36:33