IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

exécuter code graphviz avec script perl ?


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Par défaut exécuter code graphviz avec script perl ?
    Bonjour,

    Je suis actuellement en stage et voilà mon soucis.
    J'ai un script perl qui traite un fichier texte et qui grâce à ces infos, me génère un code graphviz (mêmes plusieurs dans un dossier).

    Le problème est que j'aimerais faire exécuter ces codes automatiquement à travers le script perl, afin d'enregistrer les images en .jpeg dans autre un dossier. Le but étant d'éviter de le faire de l'interface graphviz.

    J'ai télécharger la librairie Tk::GraphViz mais je ne suis pas plus aidée pour autant.

    Si quelqu'un pouvait m'aider !!!!
    Merci d'avance.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Comment crées tu ton code graphiz, via perl ? Peux tu nous montrer ton code ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Par défaut
    Oui tout à fait, au fur et à mesure du traitement je fais des print dans le fichier GRAPH :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     open (GRAPH, ">$input_path"."\\graphiques\\"."$CR_id")|| die "We can not open this file.";
    print GRAPH "digraph g {\n node [fontname = \"arial\", fontsize = \"14\", shape = \"record\"];\n";
    print GRAPH "subgraph central {\n \"CR_central\" [color = \"orangered1\", label = \"$CR_id \\n $CR_release \\n $CR_status \\n $CR_func \\n $CR_type\", style = \"bold\"]; \n }\n";
    $size_child = @CR_child;
        if ($size_child == 1 && $CR_child[0] eq $void){}
        else{
            
            print GRAPH "subgraph child { \n node [color = \"limegreen\"];\n";
            foreach $child (@CR_child) {
                if ($child ne $void){
                    &process();
                    print GRAPH "\"$child\" [label = \"$child \\n $CR_release \\n $CR_status \\n $CR_func \\n $CR_type\"];\n";
                }
            }
            print GRAPH "}\n";
        }
    .....
    Voila un bout du code perl qui me crée le code graphviz et j'obtiens un des codes graphviz suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    digraph g {
     node [fontname = "arial", fontsize = "14", shape = "record"];
    subgraph central {
     	"CR_central" [color = "orangered1", label = "aaaaa \n bbb \n cccc \n ddddd \n eeeee", style = "bold"]; 
     }
    subgraph child { 
     node [color = "limegreen"];
    "ffff" [label = "fffff \n gggg \n cccc \n \hhhh \n tttt"];
    }
    subgraph parent { 
     node [color = "limegreen"];
    "llll" [label = "llll \n bbbb \n cccc \n bbbb \n jjjj"];
    }
    subgraph {
     rank = same; CR_central; 
    }
    "CR_central" -> "fffff" [color = "limegreen"];
    "lllll" -> "CR_central" [color = "limegreen"];
    }
    Et mon problème est de faire exécuter ce dernier code automatiquement à travers le script perl, sans avoir à le faire manuellement dans graphviz (c'est à dire ouvrir graphviz, ouvrir le code, et le lancer) car il y aurai environ 650 graphiques à lancer !!!

    Pouvez vous m'aider ?

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Voilà quelques idées :
    1. Il serait peut être beaucoup plus propre de générer ton code graphivz en utilisant un module perl. Il existe le module GraphViz qui te permet de créer tes nœuds et autres via des méthodes propres au lieu d'utiliser des print. Et par la suite, il est hyper simple d'en générer une image à un format voulu en une ligne de code.
    2. Si tu ne souhaites pas réécrire ton code en utilisant ce module (que je te recommande tout de même), tu peux également lancer des commandes systèmes qui lanceront l'exécutable de graphviz pour générer tes images. Il te faut ainsi connaitre la commande adéquate à lancer. si tu ne la connais pas, tu peux l'avoir depuis graphviz quand tu génères ton codes. Je crois qu'elle est de ce type (mais tu dois mieux maitriser que moi) :
      "C:/Program Files/Graphviz2.26.3/bin/dot.exe" -Tgif -o"MonImage.gif" -Kdot
    3. Autre solution : Chercher s'il existe un module permettant de charger tes fichiers .dot à la volée et de créer les images. Mais je n'ai personnellement pas trouvé de modules.


    Pour te convaincre que la solution 1 est la plus simple, efficace et propre, voici un exemple de code qui fonctionne, il crée une image équivalente à ton code graphviz que tu nous as montré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #!/usr/bin/perl
    use strict;
    use warnings;
    use GraphViz;
     
    my $graph = GraphViz->new(
      node => {
        shape    => 'box',
        fontname => 'arial',
        fontsize => '14',
        shape    => 'record'
      }
    );
     
    $graph->add_node(
      'CR_central',
      label => 'aaaaa \n bbb \n cccc \n ddddd \n eeeee',
      color => 'orangered1',
      style => 'bold',
    );
     
    $graph->add_node('ffff');
    $graph->add_node('llll');
    $graph->add_node(
      'ffff2',
      label => 'fffff \n gggg \n cccc \n \hhhh \n tttt',
      color => 'limegreen'
    );
    $graph->add_node(
      'llll2',
      label => 'llll \n bbbb \n cccc \n bbbb \n jjjj',
      color => 'limegreen'
    );
     
    $graph->add_edge(
      'llll'  => 'CR_central',
      'color' => 'limegreen',
    );
    $graph->add_edge(
      'CR_central' => 'ffff',
      'color'      => 'limegreen',
    );
     
    # Creation d'une image
    my $image_file = "$input_path/graphiques/$CR_id";
    open( my $fh_image, '>', $image_file ) or die("Impossible de creer l'image $image_file\n");
    binmode $fh_image;
    print {$fh_image} $graph->as_png;
    close($fh_image);
    Voici l'image résultante, c'est simple non ? Il te suffit juste d'installer le module GraphViz comme expliqué dans notre FAQ Perl.
    Images attachées Images attachées  

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Par défaut
    Est ce qu'au lieu d'afficher l'image, on peut l'enregistrer dans un dossier ?

    Et enfin est ce que vous auriez un document ou un lien vers un site avec les principales méthodes de la librairie Graphviz car j'en ai cherché tout hier et je me suis perdue à force.

    Mais je vais suivre la première option se sera certainement la plus simple, du moins j'espère.

    Je me mets au boulot et je vous tiendrai au courant plus tard de mon avancement.

    En attendant merci beaucoup !!!!!!!!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Par défaut
    Oups j'ai parlé trop vite !!
    J'ai fait exécuter le code que vous m'avez fourni mais j'ai un problème. Voici l'erreur qui m'est retournée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Can't locate object method "new" via package "GraphViz" (perhaps you forgot to load "GraphViz"?)
    Alors je ne comprends pas car j'ai les fichiers GraphViz.pm, parseRecordLabel.pm et Reaper.pm.
    Peut être que je n'ai pas le bon module ????

    Si vous pouvez quelque chose pour moi merci.

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Le code que je vous ai mis au dessus fait exactement ce que vous voulez. Il vous suffit de le tester chez vous. Il créer un fichier image (ne l'ouvre pas). Vous pouvez le créer dans n'importe quel dossier de votre choix.

    En ce qui concerne la documentation du module Perl GraphViz, je vous ai mis le lien dans mon message précédent. Je vous le remets : GraphViz (c'est le module GraphViz).

    Pour la documentation officielle du logiciel GraphViz, faut voir le site.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Apache perd le lien avec script Perl
    Par ZebreLoup dans le forum Web
    Réponses: 0
    Dernier message: 07/12/2012, 14h57
  2. Exécution périodique d'un script Perl
    Par zinehom dans le forum Langage
    Réponses: 3
    Dernier message: 26/01/2012, 21h39
  3. Ouvrir Firefox avec script Perl
    Par ash_rmy dans le forum Apache
    Réponses: 17
    Dernier message: 29/08/2009, 22h09
  4. Empecher la visualisation du code d'un script PERL
    Par TigreRouge dans le forum Langage
    Réponses: 33
    Dernier message: 20/03/2006, 18h04
  5. probleme avec script perl grab_tv_fr.pl
    Par ZiMo dans le forum Langage
    Réponses: 6
    Dernier message: 30/11/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo