Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1502 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  lancer un programme automatiquement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lancer un programme automatiquement

n°1348963
cmyriam
Posté le 05-12-2013 à 16:13:09  profilanswer
 

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

mood
Publicité
Posté le 05-12-2013 à 16:13:09  profilanswer
 

n°1348979
Profil sup​primé
Posté le 05-12-2013 à 17:30:46  answer
 

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.

n°1348983
Profil sup​primé
Posté le 05-12-2013 à 17:39:11  answer
 


 
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é.

n°1349002
Nukolau
Posté le 05-12-2013 à 21:47:19  profilanswer
 


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


 
 

n°1349046
cmyriam
Posté le 06-12-2013 à 11:05:23  profilanswer
 

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.

n°1349050
Fork Bomb
Obsédé textuel
Posté le 06-12-2013 à 12:29:45  profilanswer
 

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 !"
n°1349058
Nukolau
Posté le 06-12-2013 à 14:43:15  profilanswer
 

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

n°1349065
cmyriam
Posté le 06-12-2013 à 15:23:43  profilanswer
 

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.

n°1349071
cmyriam
Posté le 06-12-2013 à 16:53:51  profilanswer
 

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

n°1349072
Nukolau
Posté le 06-12-2013 à 16:55:34  profilanswer
 

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
mood
Publicité
Posté le 06-12-2013 à 16:55:34  profilanswer
 

n°1349171
cmyriam
Posté le 09-12-2013 à 10:32:44  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  lancer un programme automatiquement

 

Sujets relatifs
Lancé apache automatiquement au démarrageSe lancer dans Debian
[UNIX] Pourquoi créer un utilisateur par programmerécupérer console d'un programme en arrière plan
Lancer un X et un programme sur l'écran d'un serveur en SSHImpossible de lancer akonadictl [Gentoo] [Résolu]
[résolu] OOo et les "en" qui s'écrivent automatiquement "em"Créer un raccourci vers un shell en lancant un programme
[icewm] Lancer automatiquement un programme lors du login[Blackbox] Lancer un programme automatiquement au démarrage ?
Plus de sujets relatifs à : lancer un programme automatiquement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR