python – subprocess.Popen(..).communication(..)当与graphviz一起使用时随机丢弃数据!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – subprocess.Popen(..).communication(..)当与graphviz一起使用时随机丢弃数据!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1330字,纯文字阅读大概需要2分钟。
内容图文
![python – subprocess.Popen(..).communication(..)当与graphviz一起使用时随机丢弃数据!](/upload/InfoBanner/zyjiaocheng/783/1985c1cf68e74f2bbfc4bf1a839bba3a.jpg)
我正在使用graphviz的点为Web应用程序生成一些svg图.我用Popen打电话给dot:
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
这个明显的错误肯定不在输入字符串中.特别是,如果我使用utf-8编码将其保存到str.txt并执行
/usr/bin/dot -Kfdp -Tsvg < str.txt > myimg.svg
我得到了所需的输出.关于str的唯一“特殊”事情是它包含像丹麦øæå这样的字符.
现在我不知道该怎么办.这个问题很可能出现在问题中;但它似乎肯定是由于Popen与使用<来自shell,我不知道从哪里开始.任何帮助或想法,或者调用dot(除了将所有数据写入文件并调用它!)将非常感激!
解决方法:
听起来你应该这样做:
stdout, stderr = p.communicate(str.encode('utf-8'))
(当然,除了你不应该影响内置的str.)Python中的unicode类型包含unicode数据,而不是UTF-8.如果你想要UTF-8,你需要对它进行显式编码.
最重要的是,没有理由在该片段中使用shell = True,也没有将unicode文字传递给subprocess.Popen一个特别好的想法(无论如何它只是被编码为ASCII.)并且最后的反斜杠是不必要的 – – Python知道该行是继续的,因为你有一个尚未关闭的开括号.所以,使用:
p = subprocess.Popen(['/usr/bin/dot', '-Kfdp', '-Tsvg'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
内容总结
以上是互联网集市为您收集整理的python – subprocess.Popen(..).communication(..)当与graphviz一起使用时随机丢弃数据!全部内容,希望文章能够帮你解决python – subprocess.Popen(..).communication(..)当与graphviz一起使用时随机丢弃数据!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。