Я использую точку graphviz для создания некоторых графиков SVG для веб-приложения. Я называю точку, используя Popen:
p = subprocess.Popen(u'/usr/bin/dot -Kfdp -Tsvg', shell=True,\
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
str = u'long-unicode-string-i-want-to-convert'
(stdout,stderr) = p.communicate(str)
Что происходит, так это то, что точечная программа генерирует ошибки вроде:
Error: not well-formed (invalid token) in line 1
... <tr><td cellpadding="4bgcolor="#EEE8AA"> ...
in label of node n260
Эта очевидная ошибка, скорее всего, НЕ во входной строке. В частности, если я сохраню его в str.txt с кодировкой utf-8 и сделаю
/usr/bin/dot -Kfdp -Tsvg < str.txt > myimg.svg
Я получаю желаемый результат. Единственное «особенное» в str - это то, что он содержит символы, такие как датский øæå.
Сейчас я понятия не имею, что мне делать. Проблема вполне может быть в точке; но, безусловно, это вызвано тем, что Popen отличается от использования <из оболочки, и я понятия не имею, с чего начать. Буду очень признателен за любую помощь или идеи для альтернативного вызова точки (помимо записи всех данных в файл и вызова этого!)! </p>