2013-12-24 3 views
1

Запуск этой команды в оболочке с Windows:Piping изображение на Windows,

djpeg -pnm -gray text.jpg | gocr - 

работает как и ожидалось - изображение декодируется djpeg исполняемого и передается gocr, который декодирует содержимое.

Я хотел был бы запустить подобный к этой задаче под Python - труба PIL изображения к gocr без записывать временные файлы. Например, я могу поручить PIL записать изображение в формате PPM (принятый gocr исполняемого) для стандартного ввода:

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

, но все, что я пытался с трубами и модулем подпроцесса, не дает мне никакой радости.

Может кто-нибудь предложить, как выполнить эту задачу через Python - образ трубы из PIL в исполняемый файл и получить текст вывода из stdout?

ответ

1

Чтобы написать gocr подпроцесса стандартного ввода, вы можете использовать модуль 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()) 
+0

Спасибо для вашего сложного ответа :) Оба ваших отрывка отлично работают – theta