2013-06-10 4 views
2

Я пытаюсь преобразовать HTML-строки в LaTex, используя pypandoc (оболочка python для Pandoc).Преобразование HTML-строк в LaTex с использованием pypandoc

Coverting файлы с помощью pypandoc работает просто отлично:

import pypandoc 

input = 'SomeFile.html' 
output = pypandoc.convert(input, 'tex') 

Но если я пытаюсь передать некоторую строку (которая должна быть возможно в соответствии с индексом pypandoc пакета, если вы определяете формат строк) я получаю IOError: [Errno 63] File name too long::

input = '''HTML-string''' 
output = pypandoc.convert(input, 'tex', format='html') 

Каким-то файл, как ожидается, даже если я указываю format='html'.

Я также пытался обойти эту проблему с помощью модуля StringIO, но без успеха:

import pypandoc 
import StringIO 

output = StringIO.StringIO() 
output.write('''HTML-string''') 
contents = output.getvalue() 
output.close() 

convertedOutput = pypandoc.convert(contents, 'tex', format='html') 

Я новичок в Python и был бы очень признателен некоторую помощь или подсказки. Заранее спасибо!

+0

Какую версию 'pypandoc' вы используете? –

+0

pypandoc-0.5.1.2 – Aik

+0

Эй, вам удалось решить проблему? –

ответ

0

Если вы отметите pypandoc источников, вы увидите, что convert просто запускает pandoc процесс с правильными входными и выходными потоками.

Ошибка возникает, когда команда pandoc не найдена. Возможно, вы установили pypandoc и забыли около pandoc. Или команда вышла из вашей оболочки PATH.

+0

Установлен Pandoc. Как я уже писал, проблема возникает, если я пытаюсь передать строку. Преобразование файлов отлично работает ... – Aik

0

В случае, если кому-то нужен ответ, здесь приведен пример минимальной обработки, используя модуль subprocess и считывающий ввод от stdin и вывод преобразованной строки по stdout.

# -*- coding: utf8 -*- 

import subprocess 
import os 

PANDOC_PATH = r"path/to/pandoc" 

def convert(text_to_convert): 

    pandoc = subprocess.Popen([os.path.join(PANDOC_PATH, 'pandoc.exe'), '-f', 'html', '-t', 'latex'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) 
    output, error = pandoc.communicate(text_to_convert.encode('utf-8')) 
    converted_output = output 

    return converted_output.decode()