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 :

system () ne revient pas ?


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Par défaut system () ne revient pas ?
    Bonjour

    j''invoke une commande csh dans un script perl, mais voila mon script plante et léxecution ne s'arrete pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	else
    		{
    		($layer)= ($line =~ m/LAYER\D+(\d+)/);
    		$line=<NXPGDS>;
    		($datatype)= ($line =~ m/DATATYPE\D+(\d+)/);
    		system ("csh -c 'echo alo > result'");
    		}		
    }
     
    close(NXPGDS);

    bon le else est enclosé dans un while aussi

    sans cet appel a csh le scipt perl marche a merveille
    si je deplace mon appel a system a la fin du fichier, ca marche egalement
    mais si je le met a línterieur du bloc else ca ne marche plus et le script ne rends plus la main.

    je suis sous csh et je fait just ./MonScript.pl

    voila si pouvez m'aider a regler mon probleme

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Par défaut
    okay, je vuiens de decouvrir ce qui se passe
    en fait le fichier est long et donc je fait appel plusieur fois a la fonction system
    c'est drole les premiers appel de system sont super rapide, mais au bout de certaine iterations l'appel devient tres lent , est ce que quelqu'un saurait a quoi c'est du ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Par défaut
    okay pour info, je fais donc 18000 fois appel a cette fonction system , et le temps quélle prends augmente avec le temps pour une raison que j'ignore pour le moment ??
    je voulais en fait beneficier de la fonction grep du c-shell , est ce que vous connaissez un equivalent de grep du coté perl qui m'eviterait cet appel a system
    je sais quíl y a le grep de perl , mais il fait pas la meme chose que le grep de csh
    je veux juste recuperer une ligne qui contient une certaine expression reguliere d'un fichier que je navait pas utilisé jusqua la , sans devoir l'ouvrir

  4. #4
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Bonjour,

    Pour que l'on puisse t'aider il nous faudrait plus d'info, quelle expression cherche tu, dans quel fichier, quel est son format...
    Affiche-nous aussi ton shell script.

    Lilian.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Par défaut
    okay merci Lilian pour ta reponse, dsl je vais mieux expliquer mon problem

    donc mon fichier dórigine ressemble a ca

    BGNSTR; # Begin of structure
    CREATION {70-1-1 1:0:0}; # creation time
    LASTMOD {109-2-12 12:51:15}; # last modification time
    STRNAME M7M6QDC$$43008064;

    BOUNDARY;
    LAYER 37;
    DATATYPE 40;
    XY 5;
    X: -3350; Y: -25910;
    X: 3350; Y: -25910;
    X: 3350; Y: 25910;
    X: -3350; Y: 25910;
    X: -3350; Y: -25910;
    ENDEL;

    BOUNDARY;
    LAYER 36;
    DATATYPE 40;
    XY 5;
    X: -3350; Y: -25910;
    X: 3350; Y: -25910;
    X: 3350; Y: 25910;
    X: -3350; Y: 25910;
    X: -3350; Y: -25910;
    ENDEL;

    BOUNDARY;
    LAYER 56;
    DATATYPE 40;

    XY 5;
    X: 2970; Y: 25470;
    X: 3330; Y: 25470;
    X: 3330; Y: 25830;

    donc ce que je veux faire c'est lire ce fichier, et remplacer les deux lignes que j'avais mise en rouge gras et mettre la sortie dans fichier disons outfile.

    ici en l'occurence je veux remplacer LAYER 56 DATATYPE 40
    par LAYER 55 DATATYPE 78


    en fait les nouvelle valeurs de Layer et datatype je ne les connais , je les lis a partir d'un autre fichie qui ressemble a ca


    OD boundary 6 26 28 88
    OD mask 6 81 76 120
    OD pin 6 82 24 45
    OD net 56 40 55 78
    OD noprocessing 6 90 32 36

    donc ici en l'occurence , comme je l'ai mis en rouge gras layer 56 datatype 40 doit etre remplacé par layer 55 datatype 78 (la ligne OD net)


    donc ce que j'ai pensé faire c'est ca

    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
    open(NXPGDS, "./Bondpad7Metal_nxp.txt") or die ("$!");
    open(STGDS, ">./Bondpad7Metal_st.txt") or die ("$!");
     
     
    select(STGDS);
     
    while (defined($line=<NXPGDS>))
    {
    	if ($line !~ m/LAYER/)
    		{
    		chomp($line);
    		print("$line\n");
    		}
    	else
    		{
    		($layer)= ($line =~ m/LAYER\D+(\d+)/);
    		$line=<NXPGDS>;
    		($datatype)= ($line =~ m/DATATYPE\D+(\d+)/);
    		system ("csh -c 'echo alo '");
    		}		
    }
     
    close(NXPGDS);
    close(STGDS);
    j'ouvre le premier fichier, je cherche les lignes layer et datatype, je recupere les valeur de layer et de datatype ,
    et la je fait appel a system csh pour faire un grep sur le 2eme fichiers qui specifie les nouvelles valeur.

    je fait par exemple system ("csh -c 'grep $layer $datatype mappinglayertable.txt'");

    et je recupere la ligne OD net 56 40 55 78

    bon je suis newbie a perl, je ne lútilise que ponctuellement donc je ne sais pas comment recuperer apres la ligne rendu par grep ni si les valeur $layer $datatype seront correctement prix en compte par la commande system


    c'est pour ca que dans mon script j'ai mis un simple echo juste pour tester, et c'est la que ca a foiré pour moi , parce que dans mon fichier de base j ái 18000 lignes qui contiennent Layer datatype, donc je devrais faire appel a system 18000 fois,

    voila merci de votre patience

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 112
    Par défaut
    okay probleme resolu
    j''ouvre le fichier de mapping , et je cree une hash table de la forme
    key: layerorigine_datatypeorigine
    value: layernew_datatypenew
    du coup plus besoin de faire appel a system

    par contre si quelquún pourrait m'expliquer pourquoi avec le temps les appels system ralentissent, ou me proposer une solution avec l'idee que j'avais utilisé au debut je suis preneur

  7. #7
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par MohEllayali Voir le message
    je voulais en fait beneficier de la fonction grep du c-shell , est ce que vous connaissez un equivalent de grep du coté perl qui m'eviterait cet appel a system
    je sais quíl y a le grep de perl , mais il fait pas la meme chose que le grep de csh
    je veux juste recuperer une ligne qui contient une certaine expression reguliere d'un fichier que je navait pas utilisé jusqua la , sans devoir l'ouvrir
    Je ne comprends pas bien le désir que tu as "de ne pas ouvrir le fichier"...
    Si ce n'est pas ton script perl qui ouvre le fichier pour appliquer le grep, ce sera la fonction grep de ton shell...

  8. #8
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    MohEllayali,

    Pendant l'execution de ton programme perl, si j'ai bien compris, ca dure un certain temps (18000 lignes); comment se comporte l'usage de la ram et et la memoire virtuelle ?
    A chaque fois que tu fais appel à csh -c .. tu demandes l'ouverture d'un nouveau shell fille ; je me demande si la mémoire est libérée à la fin de system(), ou à la fin de l'execution du programme perl ...?

    Lilian.

    EDIT : Je me pose moi aussi la même question que Philou

  9. #9
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par lilian_h Voir le message
    EDIT : Je me pose moi aussi la même question que Philou
    D'autant que l'usage de open/grep en perl ne créerait pas l'overhead (et éventuellement la consommation mémoire) de la solution shell/grep (charger un shell, charger grep, ...).

Discussions similaires

  1. Réponses: 12
    Dernier message: 14/01/2019, 01h12
  2. Mon systeme ne demarre pas
    Par mudibu dans le forum Mandriva / Mageia
    Réponses: 1
    Dernier message: 23/05/2007, 16h53
  3. => System.getenv MARCHE PAS
    Par encom79 dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 23/02/2007, 14h11
  4. [PC Restor]La réinstallation de mon systeme ne marche pas
    Par mamiberkof dans le forum Windows XP
    Réponses: 2
    Dernier message: 29/10/2006, 19h19
  5. Réponses: 13
    Dernier message: 31/08/2005, 14h03

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