Python 如何向Graphviz中的每个节点添加标签?

Python 如何向Graphviz中的每个节点添加标签?,python,subprocess,graphviz,Python,Subprocess,Graphviz,[编辑]以下是ps为我做的事情: PID TTY TIME CMD 3796 pts/0 00:00:00 bash 4811 pts/0 00:00:00 ps 我从Graphviz开始,我想显示正在运行的进程的名称。我得到了一个显示它们编号的脚本,我正在尝试为每个节点添加一个标签 问题是,只有上次写入标签显示到根节点,如何才能将标签写入每个节点 #/usr/bin/env蟒蛇3 从子流程导入Popen、管道、调用 进口稀土 点=打开(“psgra

[编辑]以下是
ps
为我做的事情:

   PID TTY          TIME CMD
  3796 pts/0    00:00:00 bash
  4811 pts/0    00:00:00 ps
我从Graphviz开始,我想显示正在运行的进程的名称。我得到了一个显示它们编号的脚本,我正在尝试为每个节点添加一个标签

问题是,只有
上次写入
标签显示到根节点,如何才能将标签写入每个节点

#/usr/bin/env蟒蛇3
从子流程导入Popen、管道、调用
进口稀土
点=打开(“psgraph.dot”,“w”)
点写(“有向图G{\n”)
p=Popen(“ps-fe”,shell=True,stdout=PIPE)
psre=re.compile(r“\w+\s+(\d+)\s+(\d+))
p、 stdout.readline()#忽略第一行
对于p.stdout中的行:
match=psre.search(行解码(“utf-8”))
如果匹配:
如果(0,2)中的int(匹配组(2)):
持续
dot.write(“{1}->{0}\n.”格式(match.group(1),match.group(2)))
对于p.stdout中的行:
match=psre.search(行解码(“utf-8”))
如果匹配:
如果(0,2)中的int(匹配组(2)):
持续
dot.write(“'1[label=“loop”]\n”“”)
点写入(““1[label=“laste write”]}\n”“”)
dot.close()
调用(“dot-Tpdf-O psgraph.dot”,shell=True)

我猜是这样的:

#也更新RE-to-capture命令
psre=re.compile(r“\w+\s+(\d+)\s+(\d+)\s+\d+:\d+:\d+\d+\s(\w+)
#收集标签
cmds=[]
p、 stdout.readline()#忽略第一行
对于p.stdout中的行:
match=psre.search(行解码(“utf-8”))
如果匹配:
如果(0,2)中的int(匹配组(2)):
持续
dot.write(“{1}->{0}\n.”格式(match.group(1),match.group(2)))
cmds.append((match.group(2)、match.group(3)),)
对于cmd,cmds中的标签:
dot.write(“{0}[label=“{1}”]\n”“”。格式(cmd,label))

很明显,我在猜测在第二个循环中究竟要写什么,或者在所有标签之前写所有节点是否有必要或有用。如果你能用你在这里想要的东西来更新这个问题,我想这应该不难。

你可以很容易地摆脱这两个
shell=True
实例
Popen(['ps','-fe'],stdout=PIPE)
call(['dot','-Tpdf','-O','psgraph.dot'])
。另请参见@tripleee检查样本的编辑并感谢链接,因此您的正则表达式正在提取PID和TTY?第二个循环应该从每一行中提取更多的内容,但您不知道如何为此创建正则表达式?@tripleee是的,我想在graphviz节点中显示
CMD
,而不是
PID
,而您的问题实际上与如何在graphviz中执行此操作无关,你只需要Python正则表达式的帮助吗?它正是我想要实现的,谢谢!