繁体   English   中英

使用 Anytree 和 graphviz 在 python 中渲染一棵树。 无法打开文件

[英]Rendering a tree in python with Anytree and graphviz. Can't open file

这个问题基于 Tarun 的答案,使用 anytree 和 graphviz 在 python 中渲染一棵树: https ://stackoverflow.com/a/49442969/2139007

安装graphviz并将其添加到我的PATH变量后,我试图运行以下python代码:

DotExporter(nodes[0]["a"],
        nodeattrfunc=lambda node: 'label="{}"'.format(node.display_name)).to_picture("tree.png")

上面的代码产生以下错误:

  Error: dot: can't open C:\Users\username\AppData\Local\Temp\tmpa7t554le
Traceback (most recent call last):
  File "D:\mypath\tree.py", line 34, in <module>
    dot.to_picture('tree.png')
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\site-packages\anytree\exporter\dotexporter.py", line 229, in to_picture
    check_call(cmd)
  File "C:\Users\username\AppData\Local\Programs\Python\Python36-32\lib\subprocess.py", line 291, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['dot', 'C:\\Users\\username\\AppData\\Local\\Temp\\tmpa7t554le', '-T', 'png', '-o', 'tree.png']' returned non-zero exit status 2.

如果我在生成.dot文件后从控制台手动运行 dot 命令“ dot tree.dot -T png -o tree.png ”,则不会出现此问题

DotExporter(nodes[0]["a"],
        nodeattrfunc=lambda node: 'label="{}"'.format(node.display_name)).to_dotfile('tree.dot')

有没有办法解决这个问题?

我刚刚遇到了这个问题。 经过 2 个小时的调试,我发现对于 Windows,您必须在 dotexporter.py 中将删除标志设置为 False。 转到“dotexporter.py”中的第 224 行并进行以下更改。 这似乎是源文件中的错误。 这对我有用:

 with NamedTemporaryFile("wb", delete=False) as dotfile:

这在某种程度上是 windows 和 python 临时文件句柄的意外行为。 请使用最新的 anytree 版本 ( https://anytree.readthedocs.io/en/latest/ )。 它包括一个修复程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM