title: subprocess.Popen(..).communicate(..) throw away data at random when used with graphviz!
body: <p>I am using graphviz's dot to generate some svg graphs for a web application. I call dot using Popen:</p>
  
  <pre><code>    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)
  </code></pre>
  
  <p>What happends is that the dot program throw errors like:</p>
  
  <pre><code>    Error: not well-formed (invalid token) in line 1 
   ... &lt;tr&gt;&lt;td cellpadding="4bgcolor="#EEE8AA"&gt; ...
  in label of node n260
  </code></pre>
  
  <p>That obvious error is most certainly NOT in the input string. In particular, if I save it to str.txt with utf-8 encoding and do</p>
  
  <pre><code>/usr/bin/dot -Kfdp -Tsvg &lt; str.txt &gt; myimg.svg
  </code></pre>
  
  <p>I get the desired output. The only 'special' thing about str is that it contain characters like the danish øæå.</p>
  
  <p>Right now I have no clue what I should do. The problem may very well be in dot; but it certainly seem to be triggered by Popen being different than using &lt; from the shell, and i have no idea where to begin. Any help or ideas for alternatively calling dot (besides writing all the data to a file and calling that!) would be very appreciated!</p>