我有一个print_dot()
函数,可以在stdout上输出点。
我可以这样做:
$ ./myprogram < input | dot -T x11
当我尝试打印一张图表时效果很好。
现在,当我打印几张图表时,什么都没有出现。点窗口为空白,X11和点占用所有CPU。 stderr上没有打印任何内容。
$ echo -e "graph { a -- b }" | dot -T x11 # work
$ echo -e "graph { a -- b } \n graph { c --d }" | dot -T x11 # doesn't work
# it seems to be interpreted nonetheless
$ echo -e "graph { a -- b } \n graph { c -- d } " | dot -T xdot
graph {
...
}
graph {
...
}
此外,当我删除2个图表之间的\n
时,只会解释第一个图表(这是一个不错的功能......):
$ echo -e "graph { a -- b } graph { c -- d } " | dot -T xdot
graph {
...
}
再次将xdot输出管道连接到点不能解决问题。
那么,如何使用graphviz渲染多个图形?
答案 0 :(得分:8)
多次拨打dot
。或者将所有内容放在一个图表中,注意避免重复名称。
答案 1 :(得分:4)
简单脚本,读取stdin上的图形并打开多个点实例。
#!/usr/bin/perl
my $o;
my @l;
while(<>) {
if(/^\s*(di)?graph/) {
push @l, $o;
$o = '';
}
$o .= $_;
}
if($o =~ /graph/) {
push @l, $o;
}
for(@l) {
if(fork() == 0) {
open my $p, '| dot -T x11' or die $!;
print $p $_;
close $p;
exit 0;
}
}
答案 2 :(得分:2)