Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Candidat au titre de Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2008
    Messages : 36
    Points : 14
    Points
    14

    Par défaut Script perl qui appelle un script perl avec un time

    Bonjour à tous,
    Je rencontre un problème pour enregistrer le temps que met mon script perl.
    Mon problème vient du fait que j'ai un premier script qui sert un peu de main et qui appelle un autre script en lui passant les paramètres.

    Script main.pl :
    Code :
    1
    2
    3
    4
    5
    6
    7
    #! /usr/bin/perl
     
    foreach $lettre ("a", "b", "c"){
    	foreach $chiffre (1, 2, 3){
    		system("perl test.pl $lettre $chiffre");
    	}
    }
    Script test.pl :
    Code :
    1
    2
    3
    4
    5
    6
    #! /usr/bin/perl
    $lettre = $ARGV[0];
    $chiffre = $ARGV[1];
     
    print "test : $lettre $chiffre\n";
    `touch test$lettre$chiffre`;
    J'ai besoin d'enregistrer le résultat de time dans le fichier qui est créé par le script test afin de sauvegarder le temps d'exécution de chaque expérimentation. Tous les fichiers créés par le script test ont toujours le format test$lettre$chiffre, du coup j'ai essayé d'ajouter le temps à la fin de ce fichier en utilisant cette commande dans mon main :

    Code :
    system("( time perl test.pl $lettre $chiffre ) 2> test$lettre$chiffre");
    Mais malheureusement bien que cette commande écrive le temps dans le bon fichier, elle me l'écrit au début du fichier ce qui efface ce qui avait avant sur les 10 premières lignes.
    Du coup comment puis je faire pour y enregistrer à la fin?

    De plus le temps retourné a un format bizarre :
    Code :
    1
    2
    0.15user 0.02system 0:00.16elapsed 112%CPU (0avgtext+0avgdata 88800maxresident)k
    0inputs+80outputs (0major+6815minor)pagefaults 0swaps
    Comment dois je faire pour avoir un format simple :
    Code :
    1
    2
    3
    real        0m4.704s
    user        0m4.584s
    sys        0m0.684s
    Bonne journée à ceux qui me liront

  2. #2
    Membre chevronné Avatar de Gardyen
    Profil pro
    Inscrit en
    août 2005
    Messages
    578
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : août 2005
    Messages : 578
    Points : 758
    Points
    758

    Par défaut

    pour indiquer que tu veux écrire à la fin du fichier, double la redirection:
    Code :
    system("( time perl test.pl $lettre $chiffre ) 2>> test$lettre$chiffre");
    le format que tu vois là est le format par défaut quand time écrit dans un fichier, pour le changer tu peux le préciser dans la commande:
    Code :
    system("time -f'real %E \nuser %U \nsys %S ' perl test.pl $lettre $chiffre 2>> test$lettre$chiffre");
    consulte le manuel si tu veux plus d'infos dans le time
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Candidat au titre de Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    mars 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2008
    Messages : 36
    Points : 14
    Points
    14

    Par défaut

    Tout marche niquel
    Merci beaucoup pour ton aide Gardyen.

  4. #4
    Membre Expert

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 182
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 1 182
    Points : 2 497
    Points
    2 497

    Par défaut

    Sinon, tu appelle au début de l'exécution la fonction Perl time qui te renvoie le nombre de secondes écoulées depuis la date origine (l'"époque", le 01/1.1970 sur les systèmes Unix). Tu stockes ce nombre. Tu recommences à la fin de l'exécution et la différence entre les deux nombres est la durée d'exécution.

    Suivant le besoin, il existe aussi des modules de profilage de code.
    Mes articles sur La programmation fonctionnelle en Perl publiés sur ce site:

    ________
    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •