lancer un programme automatiquement

lancer un programme automatiquement - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 05-12-2013 à 16:13:09    

Bonjour,
 
je travail sous linux et plus particulierement avec un logiciel appele ms qui permet de simuler des milliers de donnee biologique. Meme si vous ne le connaissez pas, je pense que vous pouvez quand meme m'aider avec mon pb.
 
Voila dans mon shell, je rentre cette commande pour lancer une simulation:
 

Code :
  1. > ./ms 68 10000 -t 45.94 -I 3 23 8 37  -n 2 1.14 -g 2 25098 -n 3 3.09 -g 3 1304876 -es 0.000005298 3 0.85 -ej 0.000005298 3 2 -ej 0.000005298 4 1 -ej 0.00028 2 1 -en 0.019171 1 0.0000163 -en 0.019175 1 0.4134 -r 300 2000 | ./statsMS_2pop 23 8 3 > Output.csv


 
Avec ./statsMS_2pop 23 8 3 qui est un script qui me permet de calculer des stats a partir des donnees obrenu grace a la simulation.
 
Mon probleme est que je voudrais relancer a la fin de chaque simulation une autre automatiquement tout en changeant certaines donnees. Je veux changer a chaque fois des valeurs (celle entre "" ) de "68", -t "45.95", -I 3 "23 8 37", -r "300" 2000.
 
Voila le script que j'ai ecrit:
 

Code :
  1. t <- c(45.94,54.6,28.45);
  2. nSample <- c(68,57,34);
  3. nsubPop <- matrix(c(3,23,8,37,12,14,3,10,19,23,14,16),nrow=3,ncol=4,byrow=TRUE)
  4. r <- c(300,157,278)
  5. for(iCount in 1:3)
  6. {
  7.   system(paste("./ms",nSample[iCount],"10000 -t",t[iCount],"-I",nsubPop[iCount,],"-n 2 1.14 -g 2 25098 -n 3 3.09 -g 3 1304876 -es 0.000005298 3 0.85 -ej 0.000005298 3 2 -ej 0.000005298 4 1 -ej 0.00028 2 1 -en 0.019171 1 0.0000163 -en 0.019175 1 0.4134 -r",
  8. r[iCount],"| ./statsMS_2pop",nsubPop[iCount,2],nsubPop[iCount,3],"3 >>Results.csv" ))
  9. }


 
Helas il ne fonctionne pas, de plus n'y aurait-il pas un moyen plus facile de faire ca comme peut etre recuperer les valeurs a partir d'un autre fichier.
 
Enfin derniere question, devrais-je faire le fichier en bash?
 
Merci par avance pour l'aide,
 
Myriam

Reply

Marsh Posté le 05-12-2013 à 16:13:09   

Reply

Marsh Posté le 05-12-2013 à 17:30:46    

Bonjour, perso je ferais deux script dans n'importe lequel des langages de scipt.
Un pour extraire les nouvelle donnée, et un pour lancer le programme avec les dites donnée.
Et j'appellerais commande_1 avec un pipe pour donner les données à commande_2 dans une boucle principale qui tournerait tand que le fichier de donnée n'est pas lu dans sa totalité.
 
Après pour les détail, man bash ou csh ou autre.

Reply

Marsh Posté le 05-12-2013 à 17:39:11    


 
Bon, j'ai peut-être bien  dit des bétise.
D'abord je ne connais pas la différence entre un pipe et une redirection.
En suite je ne suis pas certain que la commande_2 sera lancer tant que la commande_1 ne sera pas terminé.

Reply

Marsh Posté le 05-12-2013 à 21:47:19    


Pour ma part (en espérant avoir tout bien compris :) ), je ferais un fichier type csv avec les différentes valeurs, et exécuterais la commande ms au fur et a mesure du parsing du fichier. En gros :
 
csv :  

Code :
  1. 45.94,68,3 23 8 37,300
  2. 54.6,57,12 14 3 10,157
  3. 28.45,34,19 23 14 16,218


 
Et ensuite un simple script shell (bash, ksh ou autre). Ici en ksh, non testé :
 

Code :
  1. > Output.csv
  2. cat fichier_csv | while IFS=',' read t nSample nsubPop r
  3. do
  4. ./ms ${nSample} 10000 -t ${t} -I ${nsubPop}  -n 2 1.14 -g 2 25098 -n 3 3.09 -g 3 1304876 -es 0.000005298 3 0.85 -ej 0.000005298 3 2 -ej 0.000005298 4 1 -ej 0.00028 2 1 -en 0.019171 1 0.0000163 -en 0.019175 1 0.4134 -r ${r} 2000 | ./statsMS_2pop 23 8 3 >> Output.csv
  5. done


 
 

Reply

Marsh Posté le 06-12-2013 à 11:05:23    

Merci pour vos reponse.
nukolau, j'ai fait les deux fichiers comme montrer. J'ai ensuite rendu le fichier bash executable:
1. chmod +x ./Script.sh
 
Puis j'ai lancer le script:
1. ./Script.sh
 
mais j'ai un message d'erreur:
1. line 5: syntax error near unexpected taken 'done'
 
J'ai essaye plusieurs choses mais j'ai toujours le meme message.
Quelqu'un sait-il quelle est l'erreur?
Merci.

Reply

Marsh Posté le 06-12-2013 à 12:29:45    

cmyriam a écrit :

Merci pour vos reponse.
nukolau, j'ai fait les deux fichiers comme montrer. J'ai ensuite rendu le fichier bash executable:
1. chmod +x ./Script.sh
 
Puis j'ai lancer le script:
1. ./Script.sh
 
mais j'ai un message d'erreur:
1. line 5: syntax error near unexpected taken 'done'
 
J'ai essaye plusieurs choses mais j'ai toujours le meme message.
Quelqu'un sait-il quelle est l'erreur?
Merci.


La ligne 5 de ton « Script.sh » ne lui plait pas.
C’est écrit dans le message d’erreur.


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 06-12-2013 à 14:43:15    

Attention comme dit, le petit script que j'ai indiqué est fait en KSH. Je ne connais pas bien le bash, peut-être que l'IFS n'est pas utilisable directement comme ça ou que le read ne fait pas tout a fait pareil. (je n'utilise pas le bash justement parce qu'il a encore beaucoup de retard par rapport au ksh).
 
Il faudrait aussi s'assurer qu'il ne manque pas une { ou une } autour des variables, ce genre de chose.  
 
Pense également a mettre un shebang

Reply

Marsh Posté le 06-12-2013 à 15:23:43    

Alors, j'ai rajouter le shebang et normalement, le IFS devrait marcher en bash. Apres j'ai aussi essaye pour ksh et j'obtiens le meme message d'erreur.
J'ai reverifie le script et tt me semble correct. Je ne vois vraiment pas d'ou vient le probleme.

Reply

Marsh Posté le 06-12-2013 à 16:53:51    

Bon j'ai resolu tout les probleme qui finallement n'etait pas si enorme, juste des erreurs de frappe ou de format.
En tout cas merci pour le script. Et finalement il marche aussi en bash.
 
Par contre j'aurais une derniere question, le script marche mais j'obtiens un seul fichier de resultats avec les resultats des 3 simulations.
Dans mon cas je voudrais 3 fichiers differents, 1 pour chaque simulation. Comment puis-je faire?
Merci

Reply

Marsh Posté le 06-12-2013 à 16:55:34    

Je viens de tester, avec un echo "./ms" a la place de la vraie commande et chez moi ca fonctionne. Voici le résultat que ca m'a donné :

 
Code :
  1. ./ms 68 10000 -t 45.94 -I 3 23 8 37  -n 2 1.14 -g 2 25098 -n 3 3.09 -g 3 1304876 -es 0.000005298 3 0.85 -ej 0.000005298 3 2 -ej 0.000005298 4 1 -ej 0.00028 2 1 -en 0.019171 1 0.0000163 -en 0.019175 1 0.4134 -r 300 2000 | ./statsMS_2pop 23 8 3
  2. ./ms 57 10000 -t 54.6 -I 12 14 3 10  -n 2 1.14 -g 2 25098 -n 3 3.09 -g 3 1304876 -es 0.000005298 3 0.85 -ej 0.000005298 3 2 -ej 0.000005298 4 1 -ej 0.00028 2 1 -en 0.019171 1 0.0000163 -en 0.019175 1 0.4134 -r 157 2000 | ./statsMS_2pop 23 8 3
  3. ./ms 34 10000 -t 28.45 -I 19 23 14 16  -n 2 1.14 -g 2 25098 -n 3 3.09 -g 3 1304876 -es 0.000005298 3 0.85 -ej 0.000005298 3 2 -ej 0.000005298 4 1 -ej 0.00028 2 1 -en 0.019171 1 0.0000163 -en 0.019175 1 0.4134 -r 218 2000 | ./statsMS_2pop 23 8 3
 

Lors des copier/coller tu n'aurais pas mis un caractère invisible, ou un retour à la ligne indésirable ?

 

script utilisé pour mon test :

 
Code :
  1. #!/usr/bin/ksh
  2. > out.csv
  3. cat t.csv | while IFS=',' read t nSample nsubPop r
  4. do
  5.   echo "./ms ${nSample} 10000 -t ${t} -I ${nsubPop}  -n 2 1.14 -g 2 25098 -n 3 3.09 -g 3 1304876 -es 0.000005298 3 0.85 -ej 0.000005298 3 2 -ej 0.000005298 4 1 -ej 0.00028 2 1 -en 0.019171 1 0.0000163 -en 0.019175 1 0.4134 -r ${r} 2000 | ./statsMS_2pop 23 8 3" >> out.csv
  6. done
 


Arf, j'avais pas vu la réponse dans l'intervalle :)

 

Pour les résultats dans des fichiers différents, il faut variabiliser le nom du fichier csv de sortie. Par exemple a l'aide d'un compteur, ou de la date, ou autre, quitte à ajouter une entrée supplémentaire dans le csv de départ.

 
Code :
  1. ./ms > out_$(date '+%H%M%S').csv


Message édité par Nukolau le 06-12-2013 à 17:03:52
Reply

Marsh Posté le 06-12-2013 à 16:55:34   

Reply

Marsh Posté le 09-12-2013 à 10:32:44    

Merci beaucoup pour l'aide.
Le script marche parfaitement maintenant.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed