むかーしやったことある気もするんだけど、コードが見つからなかったのでちょちょいと。
#!/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')