Lancer un programme python depuis un script shell
pasletempsdetrouverunpseudo
Messages postés
4
Statut
Membre
-
lEprofSonDkon Messages postés 227 Statut Membre -
lEprofSonDkon Messages postés 227 Statut Membre -
Bonjour à la communauté,
J'ai depuis un moment un problème qui me semble être minuscule, néanmoins je n'arrive pas à trouver de solutions malgré mes longues recherches (sur des forums, etc...). Il faut dire que je découvre les commandes linux...
J'ai fait un programme python qui prend en entrée un fichier de données .dat. Je peux le lancer sans soucis avec la console grâce à la commande "python3 mon_prgm.py nom_de_mon_fichier.dat".
A présent, j'ai besoin de faire un script shell (ou un programme python, mais j'ai débord essayé en script shell) qui lance mon 1er programme autant de fois qu'il y a de fichiers de données qui contiennent le mot "NOEUD" dans le répertoire courant.
Voilà à quoi ressemble mon code :
for fichier in find -type f -name "NOEUD*.dat"/mon_repertoire/*
do
python3 mon_prgm.py fichier
done
Cela génère l'erreur :
FileNotFoundError: [Errno 2] No such file or directory: 'fichier'
Concrètement, j'ai l'impression que le programme python est bien lancé, mais que son paramètre d'entrée (qui doit être un fichier de données .dat) ne comprend pas que la variable "fichier" du script shell est un fichier. Et 2ème problème, le message d'erreur apparaît toujours 5 fois (comme si le prgm python essayait de se lancer 5 fois), alors qu'il n'y a pas 5 fichiers s'appellant "NOEUD*.dat" ...
Merci d'avance si quelqu'un peut m'aider !
J'ai depuis un moment un problème qui me semble être minuscule, néanmoins je n'arrive pas à trouver de solutions malgré mes longues recherches (sur des forums, etc...). Il faut dire que je découvre les commandes linux...
J'ai fait un programme python qui prend en entrée un fichier de données .dat. Je peux le lancer sans soucis avec la console grâce à la commande "python3 mon_prgm.py nom_de_mon_fichier.dat".
A présent, j'ai besoin de faire un script shell (ou un programme python, mais j'ai débord essayé en script shell) qui lance mon 1er programme autant de fois qu'il y a de fichiers de données qui contiennent le mot "NOEUD" dans le répertoire courant.
Voilà à quoi ressemble mon code :
for fichier in find -type f -name "NOEUD*.dat"/mon_repertoire/*
do
python3 mon_prgm.py fichier
done
Cela génère l'erreur :
FileNotFoundError: [Errno 2] No such file or directory: 'fichier'
Concrètement, j'ai l'impression que le programme python est bien lancé, mais que son paramètre d'entrée (qui doit être un fichier de données .dat) ne comprend pas que la variable "fichier" du script shell est un fichier. Et 2ème problème, le message d'erreur apparaît toujours 5 fois (comme si le prgm python essayait de se lancer 5 fois), alors qu'il n'y a pas 5 fichiers s'appellant "NOEUD*.dat" ...
Merci d'avance si quelqu'un peut m'aider !
A voir également:
- Lancer un programme python depuis le terminal linux
- Commande terminal mac - Guide
- Lancer un programme au démarrage windows 10 - Guide
- Programme demarrage windows - Guide
- Citizen code python avis - Accueil - Outils
- Linux reader - Télécharger - Stockage
4 réponses
Salut,
Avant de lancer quoi que ce soit, on commence toujours en général, par voir ce que pourrait donner une commande en retour…
Donc, perso je commencerais plutôt par voir ce que me retourne la commande (voir au passage le man find pour la bonne syntaxe ;-\) :
Si le retour est concluant, avec les exemples en fin du man find, j'essaierai d'y inclure le programme python…
Avant de lancer quoi que ce soit, on commence toujours en général, par voir ce que pourrait donner une commande en retour…
Donc, perso je commencerais plutôt par voir ce que me retourne la commande (voir au passage le man find pour la bonne syntaxe ;-\) :
find /mon_repertoire/ -type f -name "NOEUD*.dat"
Si le retour est concluant, avec les exemples en fin du man find, j'essaierai d'y inclure le programme python…
En testant la commande que tu indiques, j'obtiens en retour les 3 fichiers qui correspondent à la recherche, donc c'est très bien, jusque là tout fonctionne correctement.
Ensuite je l'intègre dans le programme :
for fichier in find /mon_répertoire/ -type f -name "NOEUD*.dat"
do
python3 mon_prgm.py fichier
done
Et là j'obtiens la même erreur... Mais cette fois elle apparaît 6 fois et non plus 5 fois...
Est-ce que le problème viendrait de ma boucle que j'écris "for fichier in find ... ? Etant donné que la commande find ... renvoie le nom des fichiers correspondant à la requête, ça me semblerait possible...
Ensuite je l'intègre dans le programme :
for fichier in find /mon_répertoire/ -type f -name "NOEUD*.dat"
do
python3 mon_prgm.py fichier
done
Et là j'obtiens la même erreur... Mais cette fois elle apparaît 6 fois et non plus 5 fois...
Est-ce que le problème viendrait de ma boucle que j'écris "for fichier in find ... ? Etant donné que la commande find ... renvoie le nom des fichiers correspondant à la requête, ça me semblerait possible...
salut,
continue en python.
tu es capable d'écrire un script python qui traite un fichier, mais tu ne sais pas y insérer une boucle pour en traiter plusieurs ?! 8O
tu as fait le plus difficile; l'insertion d'une boucle dans un programme python me parait trivial.
mais je ne fait pas de python. :/
et puis
continue en python.
tu es capable d'écrire un script python qui traite un fichier, mais tu ne sais pas y insérer une boucle pour en traiter plusieurs ?! 8O
tu as fait le plus difficile; l'insertion d'une boucle dans un programme python me parait trivial.
mais je ne fait pas de python. :/
et puis
findpour trouver des fichiers dans le répertoire courant est inutile.
lEprofSonDkon, pour être honnête, j'ai d'abord commencé par essayer de le faire sur python, mais je suis tombé sur des problèmes "étonnants" qui m'ont fait me décider à l'écrire plutôt en script shell. Et à présent, le script fait littéralement 3 lignes donc je suis persuadé que c'est vraiment un problème encore plus trivial qu'en python... J'aimerais vraiment y arriver en script shell... Mais en effet si j'échoue encore je réessaierai avec python.