Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Programmation et administration système
Programmation et administration système Vos questions sur les scripts d'administration système, création de compte utilisateur, socket, fork, ping, etc...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/09/2012, 08h21   #1
lovelace63
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mars 2008
Messages : 33
Détails du profil
Informations personnelles :
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2008
Messages : 33
Points : 13
Points : 13
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
lovelace63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2012, 10h40   #2
Gardyen
Membre chevronné
 
Avatar de Gardyen
 
Inscription : août 2005
Messages : 494
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France

Informations forums :
Inscription : août 2005
Messages : 494
Points : 676
Points : 676
Envoyer un message via ICQ à Gardyen
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
Gardyen est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/09/2012, 14h43   #3
lovelace63
Candidat au titre de Membre du Club
 
Étudiant
Inscription : mars 2008
Messages : 33
Détails du profil
Informations personnelles :
Localisation : France, Puy de Dôme (Auvergne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2008
Messages : 33
Points : 13
Points : 13
Tout marche niquel
Merci beaucoup pour ton aide Gardyen.
lovelace63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2012, 19h40   #4
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 569
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 : 569
Points : 1 119
Points : 1 119
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.
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h41.


 
 
 
 
Partenaires

Hébergement Web