kernel moduleの依存関係をグラフにしたい

Python

むかーしやったことある気もするんだけど、コードが見つからなかったのでちょちょいと。

#!/usr/bin/env python3

import gv
import subprocess

g = gv.digraph('lsmod')
gv.setv(g, 'rankdir', 'LR')
lsmod=subprocess.run("lsmod|sed -e '1d'|awk '{print $1, $4}'", shell=True, stdout=subprocess.PIPE, encoding='utf-8')
for ln in lsmod.stdout.splitlines():
    ln_sp = ln.split(' ')
    if len(ln_sp) == 2:
        if ln_sp[1] != '':
            for u in ln_sp[1].split(','):
                gv.edge(gv.node(g, u), gv.node(g, ln_sp[0]))
        else:
            gv.node(g, ln_sp[0])
gv.layout(g, "circo")
gv.render(g, "png", './lsmod_graph.png')