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

时间:2018-09-25 08:29:31

标签: python graphviz pydot anytree

此问题基于塔伦(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 tree.dot -T png -o tree.png '不会发生此问题>文件

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

这是Windows和python临时文件句柄的意外行为。请仅使用最新的Anytree版本(https://anytree.readthedocs.io/en/latest/)。它包含一个修复程序。