#python #python-3.x #shell #subprocess
Вопрос:
Я использую Python 2.7.3.
У меня есть функция, которая запускается tesseract
как командная строка. Все работает нормально, и теперь я хотел бы добавить в команду новый параметр -l rus
(обозначающий русский язык). Несмотря на то, что это работает в моей командной строке, похоже, что это не работает с Python.
Командная строка:
$ /usr/local/bin/tesseract /Users/anthony/Downloads/rus.png outfile -l rus amp;amp; more outfile.txt
Tesseract Open Source OCR Engine v3.02.02 with Leptonica
Полу-Милорд, полу-купец,
Полу-мудрец, полу-невежда,
Полу-подлец, но есть надежда,
Что будет полным наконец.
Функция Python
def ocr(self,path):
path = "/Users/anthony/Downloads/rus.png"
process = subprocess.Popen(['/usr/local/bin/tesseract', path,'outfile','-l rus'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out, err = process.communicate()
print err
print out
with open('outfile.txt', 'r') as handle:
contents = handle.read()
os.remove(temp.name '.txt')
os.remove(temp.name)
return contents, out
приведенное выше возвращает «HOIIY nony HOIIY nony Hony no ecTb HHJICXQRI 6y11e», что говорит о том, что -l rus
флаг игнорируется.
Вопрос
Как я могу выполнить следующую команду в качестве подпроцесса python?
/usr/local/bin/tesseract /Users/anthony/Downloads/rus.png outfile -l rus
Комментарии:
1. You probably want ‘-l’, ‘rus’, генерал-губернатор.
Ответ №1:
Вам нужно разделить '-l rus'
аргумент на два отдельных, чтобы убедиться, что программа правильно его проанализировала:
process = subprocess.Popen(
['/usr/local/bin/tesseract', path, 'outfile', '-l', 'rus'],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
Это может быть удобно использовать str.split()
или shlex.split()
для этого:
cmd = '/usr/local/bin/tesseract /Users/anthony/Downloads/rus.png outfile -l rus'
process = subprocess.Popen(
cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT
)
Ответ №2:
process = subprocess.Popen('/usr/local/bin/tesseract ' path ' outfile -l rus', stdout=subprocess.PIPE, stderr=subprocess.STDOUT,shell=True)
Вы можете запустить его с shell=True
помощью .