2011-03-17 3 views
12

나는 stdout에 점을 출력하는 print_dot() 함수를 가지고있다. 그런 식으로 내가 할 수있는 : 나는 하나의 그래프를 인쇄 할 때점으로 여러 그래프를 그리는 방법은 무엇입니까?

$ ./myprogram < input | dot -T x11 

그것은 잘 작동합니다.

이제 여러 그래프를 인쇄해도 아무 것도 나타나지 않습니다. 점 창은 비어 있으며, X11과 점은 모든 CPU를 사용합니다. stderr에는 아무 것도 인쇄되지 않습니다. I는 \n의 두 그래프를 제거 할 때 또

$ 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 { 
    ... 
} 

, 첫 번째 그래프 (... 얼마나 좋은 기능) 해석 :

$ echo -e "graph { a -- b } graph { c -- d } " | dot -T xdot 
graph { 
    ... 
} 

다시 점 케이 할 xdot 출력 파이핑 문제를 해결할 수 없습니다.

그렇다면 graphviz로 여러 그래프를 어떻게 렌더링합니까?

답변

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;   
    } 
} 
7

하나는 dot을 여러 번 호출합니다. 또는 이름의 중복을 피하기 위해 모든 것을 하나의 그래프에 넣습니다.

+3

3 시간 낭비. 큰. – knarf

0

사용 gvpack

$ echo -e "graph { a -- b }\ngraph { c -- d }" | gvpack -u | dot -Tpng > graphs.png 

결과

enter image description here

관련 문제