【问题标题】:Rendering a tree in python with Anytree and graphviz. Can't open file使用 Anytree 和 graphviz 在 python 中渲染树。无法打开文件
【发布时间】:2020-01-15 09:32:40
【问题描述】:

这个问题是基于 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')

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

【问题讨论】:

  • 你能打开“C:\Users\username\AppData\Local\Temp\tmpa7t554le”看看发生了什么
  • 您好,感谢您的帮助。实际上,似乎没有创建 tmp 文件。因此它没有显示,也无法通过 Windows 资源管理器访问。
  • 可能是一些用户访问问题或什么?尝试进入 DotExporter 的代码,看看发生了什么

标签: python graphviz pydot anytree


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2018-12-29
      • 2021-04-10
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多