J'utilise le point de graphviz pour générer des graphiques svg pour une application web. J'appeler en utilisant les points sur Popen:subprocess.Popen (..). Communiquer (..) jeter des données au hasard lorsqu'il est utilisé avec graphviz!
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)
Quelle happends est que les erreurs de jet de programme de points comme:
Error: not well-formed (invalid token) in line 1
... <tr><td cellpadding="4bgcolor="#EEE8AA"> ...
in label of node n260
Cette erreur évidente est certainement pas dans la chaîne d'entrée. En particulier, si je l'enregistre à str.txt avec encodage UTF-8 et ne
/usr/bin/dot -Kfdp -Tsvg <str.txt> myimg.svg
Je reçois la sortie désirée. La seule chose "spéciale" à propos de str est qu'il contient des caractères comme le øæå danois.
En ce moment je n'ai aucune idée de ce que je devrais faire. Le problème peut très bien être en point; mais il semble certainement être déclenché par Popen étant différent de l'utilisation < du shell, et je n'ai aucune idée par où commencer. Toute aide ou idée pour l'appel de points (en plus d'écrire toutes les données dans un fichier et d'appeler ça!) Serait très appréciée!
Merci Thomas! Cela a fait l'affaire. Boy je me sens stupide, je passe 5 heures 'débogage' un problème unicode trivial :-(. Aussi merci pour les conseils de style Désolé, si mon code merdique causé des dommages physiques! ;-) –
Je reçois "UnicodeEncodeError: ' codec ascii 'ne peut pas encoder les caractères en position 29-31: ordinal pas dans la plage (128) ". Une idée? tia btw, c'est 2.6 sur Windows: – nad2000