在Windows上管道图像

时间:2013-12-24 01:52:32

标签: python windows pipe

在Windows shell中运行此命令:

djpeg -pnm -gray text.jpg | gocr -

按预期工作 - 图像由djpeg可执行文件解码并传递给gocr,后者对内容进行解码。

我想在Python下运行类似于此任务 - 将PIL图像管道传输到gocr而不编写临时文件。例如,我可以指示PIL将图像以PPM格式(由gocr可执行文件接受)写入stdin:

im.save(sys.stdin, 'PPM')

但是我用管道和子进程模块尝试的任何东西都没有给我带来欢乐。

有人可以建议如何通过Python运行此任务 - 将图像从PIL管道传输到可执行文件并从stdout获取文本输出吗?

1 个答案:

答案 0 :(得分:1)

要写入gocr子进程'stdin,您可以使用subprocess模块:

from subprocess import Popen, PIPE

p = Popen(["gocr", "-"], stdin=PIPE)
im.save(p.stdin, 'PPM')
p.stdin.close()
p.wait()

如果im.save()不能用于管道,则首先将图像转换为字节串:

from subprocess import Popen, PIPE
from StringIO import StringIO

buf = StringIO()
im.save(buf, 'PPM')

p = Popen(["gocr", "-"], stdin=PIPE)
p.communicate(input=buf.getvalue())