ma question est surement très naïve pour les utilisateurs de python
et les informaticiens: lorsque j'essaie le programme suivant où
monprogramme est un script bash personnel prenant un argument
import os
fichier = open('monfichier','r')
for d in fichier.readlines():
os.system("monprogramme d")
file.close
d n'est pas remplacé par la ligne.
Merci d'avance pour une réponse ou une référence où je pourrais trouver
ce genre de chose.
Effectivement, je ne devais pas être bien réveillé. J'ai répondu un peu n'importe quoi.
Bruno, lui, qui est sans doute un "levé comme les poules", a bien mieux réagit....
@+
MCI
Etienne Marache
Bruno Piguet writes:
import os fichier = open('monfichier','r') for d in fichier.readlines(): os.system("monprogramme d") file.close d n'est pas remplacé par la ligne. Merci d'avance pour une réponse ou une référence où je pourrais trouver ce genre de chose.
parce que que c'est toujours la même chaîne de caractère :
"monprogramme d"
essayer "monprogramme "+d ou "monprogramme %s" % d
Bruno.
Merci beaucoup
os.system("monprogramme "+d) et os.system("monprogramme %s" % d)
marchent
c'est clairement un problème de d'expansion, il faut que le d soit remplacé avant la lecture par os.system. Si je comprends bien les guillemets bloquent l'évaluation du d et sinon les opérations sur les chaînes sont effectuées avant l'exécution de la commande. Je suppose que c'est un principe dans python de traiter les paramètres avant de les passer à la commande.
Je comprends la première solution. La seconde est mystérieuse pour moi mais je vais essayer de voir dans la doc.
J'ai une autre solution: réécrire le script en python! Cela me fera un bon exercice.
Etienne
Bruno Piguet <bpiguet@teaser.fr> writes:
import os
fichier = open('monfichier','r')
for d in fichier.readlines():
os.system("monprogramme d")
file.close
d n'est pas remplacé par la ligne.
Merci d'avance pour une réponse ou une référence où je pourrais
trouver
ce genre de chose.
parce que que c'est toujours la même chaîne de caractère :
"monprogramme d"
essayer "monprogramme "+d
ou
"monprogramme %s" % d
Bruno.
Merci beaucoup
os.system("monprogramme "+d)
et
os.system("monprogramme %s" % d)
marchent
c'est clairement un problème de d'expansion, il faut que le d soit
remplacé avant la lecture par os.system. Si je comprends bien les
guillemets bloquent l'évaluation du d et sinon les opérations sur les
chaînes sont effectuées avant l'exécution de la commande. Je suppose que
c'est un principe dans python de traiter les paramètres avant de les
passer à la commande.
Je comprends la première solution. La seconde est mystérieuse pour moi
mais je vais essayer de voir dans la doc.
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
import os fichier = open('monfichier','r') for d in fichier.readlines(): os.system("monprogramme d") file.close d n'est pas remplacé par la ligne. Merci d'avance pour une réponse ou une référence où je pourrais trouver ce genre de chose.
parce que que c'est toujours la même chaîne de caractère :
"monprogramme d"
essayer "monprogramme "+d ou "monprogramme %s" % d
Bruno.
Merci beaucoup
os.system("monprogramme "+d) et os.system("monprogramme %s" % d)
marchent
c'est clairement un problème de d'expansion, il faut que le d soit remplacé avant la lecture par os.system. Si je comprends bien les guillemets bloquent l'évaluation du d et sinon les opérations sur les chaînes sont effectuées avant l'exécution de la commande. Je suppose que c'est un principe dans python de traiter les paramètres avant de les passer à la commande.
Je comprends la première solution. La seconde est mystérieuse pour moi mais je vais essayer de voir dans la doc.
J'ai une autre solution: réécrire le script en python! Cela me fera un bon exercice.
Etienne
Bruno Desthuilliers
Bonjour,
ma question est surement très naïve pour les utilisateurs de python et les informaticiens: lorsque j'essaie le programme suivant où monprogramme est un script bash personnel prenant un argument
import os
fichier = open('monfichier','r') for d in fichier.readlines(): os.system("monprogramme d")
file.close
d n'est pas remplacé par la ligne.
os.system("monprogramme %s" % d)
"monprogramme d" est une chaine littérale, la lettre 'd' n'y sera pas remplacée par la valeur d'une variable de même nom - et c'est une bonne chose... (hint : remplace 'monprogramme' par 'cd', et imagine ce que ça donnerait)
Bonjour,
ma question est surement très naïve pour les utilisateurs de python
et les informaticiens: lorsque j'essaie le programme suivant où
monprogramme est un script bash personnel prenant un argument
import os
fichier = open('monfichier','r')
for d in fichier.readlines():
os.system("monprogramme d")
file.close
d n'est pas remplacé par la ligne.
os.system("monprogramme %s" % d)
"monprogramme d" est une chaine littérale, la lettre 'd' n'y sera pas
remplacée par la valeur d'une variable de même nom - et c'est une bonne
chose... (hint : remplace 'monprogramme' par 'cd', et imagine ce que ça
donnerait)
ma question est surement très naïve pour les utilisateurs de python et les informaticiens: lorsque j'essaie le programme suivant où monprogramme est un script bash personnel prenant un argument
import os
fichier = open('monfichier','r') for d in fichier.readlines(): os.system("monprogramme d")
file.close
d n'est pas remplacé par la ligne.
os.system("monprogramme %s" % d)
"monprogramme d" est une chaine littérale, la lettre 'd' n'y sera pas remplacée par la valeur d'une variable de même nom - et c'est une bonne chose... (hint : remplace 'monprogramme' par 'cd', et imagine ce que ça donnerait)
Bruno Desthuilliers
Bruno Piguet writes:
import os fichier = open('monfichier','r') for d in fichier.readlines(): os.system("monprogramme d") file.close d n'est pas remplacé par la ligne. Merci d'avance pour une réponse ou une référence où je pourrais trouver ce genre de chose.
parce que que c'est toujours la même chaîne de caractère : "monprogramme d"
essayer "monprogramme "+d ou "monprogramme %s" % d
Bruno.
Merci beaucoup
os.system("monprogramme "+d) et os.system("monprogramme %s" % d)
marchent
c'est clairement un problème de d'expansion, il faut que le d soit remplacé avant la lecture par os.system.
Pour ce que tu veux faire, oui.
Si je comprends bien les guillemets bloquent l'évaluation du d
Non. Les guillemets définissent une chaine littérale.
et sinon les opérations sur les chaînes sont effectuées avant l'exécution de la commande.
Dans ton cas, s/exécution de la commande/appel de la fonction/.
En Python, une "commande" est quelque chose qui fait directement partie du langage, comme par exemple print, def, class, etc... os.system() est une fonction ('system') qui est définie dans le module 'os'.
Je suppose que c'est un principe dans python de traiter les paramètres avant de les passer à la commande.
s/commande/fonction/. Et c'est le cas dans la grande majorité des langages de programmation : les paramètres sont évalués avant l'appel de la fonction.
Je comprends la première solution. La seconde est mystérieuse pour moi mais je vais essayer de voir dans la doc.
C'est du formatage de chaine, sur le principe du "printf" du C. Tu trouvera des infos dans le tutoriel.
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas vraiment un programme "de script" - plutôt un langage de programmation utilisable pour du script - et que certaines choses sont bien plus simples à faire en script shell.
Bruno Piguet <bpiguet@teaser.fr> writes:
import os
fichier = open('monfichier','r')
for d in fichier.readlines():
os.system("monprogramme d")
file.close
d n'est pas remplacé par la ligne.
Merci d'avance pour une réponse ou une référence où je pourrais
trouver
ce genre de chose.
parce que que c'est toujours la même chaîne de caractère :
"monprogramme d"
essayer "monprogramme "+d
ou
"monprogramme %s" % d
Bruno.
Merci beaucoup
os.system("monprogramme "+d)
et
os.system("monprogramme %s" % d)
marchent
c'est clairement un problème de d'expansion, il faut que le d soit
remplacé avant la lecture par os.system.
Pour ce que tu veux faire, oui.
Si je comprends bien les
guillemets bloquent l'évaluation du d
Non. Les guillemets définissent une chaine littérale.
et sinon les opérations sur les
chaînes sont effectuées avant l'exécution de la commande.
Dans ton cas, s/exécution de la commande/appel de la fonction/.
En Python, une "commande" est quelque chose qui fait directement partie
du langage, comme par exemple print, def, class, etc... os.system() est
une fonction ('system') qui est définie dans le module 'os'.
Je suppose que
c'est un principe dans python de traiter les paramètres avant de les
passer à la commande.
s/commande/fonction/. Et c'est le cas dans la grande majorité des
langages de programmation : les paramètres sont évalués avant l'appel de
la fonction.
Je comprends la première solution. La seconde est mystérieuse pour moi
mais je vais essayer de voir dans la doc.
C'est du formatage de chaine, sur le principe du "printf" du C. Tu
trouvera des infos dans le tutoriel.
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas
vraiment un programme "de script" - plutôt un langage de programmation
utilisable pour du script - et que certaines choses sont bien plus
simples à faire en script shell.
import os fichier = open('monfichier','r') for d in fichier.readlines(): os.system("monprogramme d") file.close d n'est pas remplacé par la ligne. Merci d'avance pour une réponse ou une référence où je pourrais trouver ce genre de chose.
parce que que c'est toujours la même chaîne de caractère : "monprogramme d"
essayer "monprogramme "+d ou "monprogramme %s" % d
Bruno.
Merci beaucoup
os.system("monprogramme "+d) et os.system("monprogramme %s" % d)
marchent
c'est clairement un problème de d'expansion, il faut que le d soit remplacé avant la lecture par os.system.
Pour ce que tu veux faire, oui.
Si je comprends bien les guillemets bloquent l'évaluation du d
Non. Les guillemets définissent une chaine littérale.
et sinon les opérations sur les chaînes sont effectuées avant l'exécution de la commande.
Dans ton cas, s/exécution de la commande/appel de la fonction/.
En Python, une "commande" est quelque chose qui fait directement partie du langage, comme par exemple print, def, class, etc... os.system() est une fonction ('system') qui est définie dans le module 'os'.
Je suppose que c'est un principe dans python de traiter les paramètres avant de les passer à la commande.
s/commande/fonction/. Et c'est le cas dans la grande majorité des langages de programmation : les paramètres sont évalués avant l'appel de la fonction.
Je comprends la première solution. La seconde est mystérieuse pour moi mais je vais essayer de voir dans la doc.
C'est du formatage de chaine, sur le principe du "printf" du C. Tu trouvera des infos dans le tutoriel.
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas vraiment un programme "de script" - plutôt un langage de programmation utilisable pour du script - et que certaines choses sont bien plus simples à faire en script shell.
Etienne Marache
Bruno Desthuilliers writes:
En Python, une "commande" est quelque chose qui fait directement partie du langage, comme par exemple print, def, class, etc... os.system() est une fonction ('system') qui est définie dans le module 'os'.
Je suppose que c'est un principe dans python de traiter les paramètres avant de les passer à la commande.
s/commande/fonction/. Et c'est le cas dans la grande majorité des langages de programmation : les paramètres sont évalués avant l'appel de la fonction.
Je comprends la première solution. La seconde est mystérieuse pour moi mais je vais essayer de voir dans la doc.
C'est du formatage de chaine, sur le principe du "printf" du C. Tu trouvera des infos dans le tutoriel.
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas vraiment un programme "de script" - plutôt un langage de programmation utilisable pour du script - et que certaines choses sont bien plus simples à faire en script shell.
Merci pour toutes ces précisions, et je m'aperçois de la justesse de cette dernière remarque, mon but est de faire des petits programmes utilisant postgresql et latex (saisie de données, traitement puis exploitation dans un document). Je pensais au départ faire un seul programme python mais je commence à croire qu'il est plus pratique de faire un script bash appelant un ou deux programme python et d'autres commandes même si ça fait un peu salmigondis.
Etienne
Bruno Desthuilliers <bdesth.quelquechose@free.quelquepart.fr> writes:
En Python, une "commande" est quelque chose qui fait directement
partie du langage, comme par exemple print, def, class,
etc... os.system() est une fonction ('system') qui est définie dans le
module 'os'.
Je suppose que
c'est un principe dans python de traiter les paramètres avant de les
passer à la commande.
s/commande/fonction/. Et c'est le cas dans la grande majorité des
langages de programmation : les paramètres sont évalués avant l'appel
de la fonction.
Je comprends la première solution. La seconde est mystérieuse pour moi
mais je vais essayer de voir dans la doc.
C'est du formatage de chaine, sur le principe du "printf" du C. Tu
trouvera des infos dans le tutoriel.
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas
vraiment un programme "de script" - plutôt un langage de programmation
utilisable pour du script - et que certaines choses sont bien plus
simples à faire en script shell.
Merci pour toutes ces précisions, et je m'aperçois de la justesse de
cette dernière remarque, mon but est de faire des petits programmes
utilisant postgresql et latex (saisie de données, traitement puis
exploitation dans un document). Je pensais au départ faire un seul
programme python mais je commence à croire qu'il est plus pratique de
faire un script bash appelant un ou deux programme python et d'autres
commandes même si ça fait un peu salmigondis.
En Python, une "commande" est quelque chose qui fait directement partie du langage, comme par exemple print, def, class, etc... os.system() est une fonction ('system') qui est définie dans le module 'os'.
Je suppose que c'est un principe dans python de traiter les paramètres avant de les passer à la commande.
s/commande/fonction/. Et c'est le cas dans la grande majorité des langages de programmation : les paramètres sont évalués avant l'appel de la fonction.
Je comprends la première solution. La seconde est mystérieuse pour moi mais je vais essayer de voir dans la doc.
C'est du formatage de chaine, sur le principe du "printf" du C. Tu trouvera des infos dans le tutoriel.
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas vraiment un programme "de script" - plutôt un langage de programmation utilisable pour du script - et que certaines choses sont bien plus simples à faire en script shell.
Merci pour toutes ces précisions, et je m'aperçois de la justesse de cette dernière remarque, mon but est de faire des petits programmes utilisant postgresql et latex (saisie de données, traitement puis exploitation dans un document). Je pensais au départ faire un seul programme python mais je commence à croire qu'il est plus pratique de faire un script bash appelant un ou deux programme python et d'autres commandes même si ça fait un peu salmigondis.
Etienne
Bruno Desthuilliers
Bruno Desthuilliers writes:
(snip)
J'ai une autre solution: réécrire le script en python! Cela me fera un bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas vraiment un programme "de script" - plutôt un langage de programmation utilisable pour du script - et que certaines choses sont bien plus simples à faire en script shell.
Merci pour toutes ces précisions, et je m'aperçois de la justesse de cette dernière remarque, mon but est de faire des petits programmes utilisant postgresql et latex (saisie de données, traitement puis exploitation dans un document). Je pensais au départ faire un seul programme python mais je commence à croire qu'il est plus pratique de faire un script bash appelant un ou deux programme python et d'autres commandes même si ça fait un peu salmigondis.
Regarde comment fonctionne un système unix, et tu auras moins de scrupules. C'est même la philosophie d'unix : des programmes qui font une seule chose (et la font bien), assemblés par des scripts shell. L'intérêt d'un langage comme Python est de remplir l'espace entre le C (bien pour des briques de bases, mais souvent de trop bas niveau pour la logique applicative) et les scripts shell.
Bref, tant que ce qu'il y a faire est assez stupide^Msimple pour du bash, pas de scrupules. Si ça commence à devenir trop compliqué, il sera temps de songer à ré-implémenter l'affaire en Python.
Mes 2 centimes...
Bruno Desthuilliers <bdesth.quelquechose@free.quelquepart.fr> writes:
(snip)
J'ai une autre solution: réécrire le script en python! Cela me fera un
bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas
vraiment un programme "de script" - plutôt un langage de programmation
utilisable pour du script - et que certaines choses sont bien plus
simples à faire en script shell.
Merci pour toutes ces précisions, et je m'aperçois de la justesse de
cette dernière remarque, mon but est de faire des petits programmes
utilisant postgresql et latex (saisie de données, traitement puis
exploitation dans un document). Je pensais au départ faire un seul
programme python mais je commence à croire qu'il est plus pratique de
faire un script bash appelant un ou deux programme python et d'autres
commandes même si ça fait un peu salmigondis.
Regarde comment fonctionne un système unix, et tu auras moins de
scrupules. C'est même la philosophie d'unix : des programmes qui font
une seule chose (et la font bien), assemblés par des scripts shell.
L'intérêt d'un langage comme Python est de remplir l'espace entre le C
(bien pour des briques de bases, mais souvent de trop bas niveau pour la
logique applicative) et les scripts shell.
Bref, tant que ce qu'il y a faire est assez stupide^Msimple pour du
bash, pas de scrupules. Si ça commence à devenir trop compliqué, il sera
temps de songer à ré-implémenter l'affaire en Python.
J'ai une autre solution: réécrire le script en python! Cela me fera un bon exercice.
Why not ? Mais comprend bien que Python, quoi qu'on en dise, n'est pas vraiment un programme "de script" - plutôt un langage de programmation utilisable pour du script - et que certaines choses sont bien plus simples à faire en script shell.
Merci pour toutes ces précisions, et je m'aperçois de la justesse de cette dernière remarque, mon but est de faire des petits programmes utilisant postgresql et latex (saisie de données, traitement puis exploitation dans un document). Je pensais au départ faire un seul programme python mais je commence à croire qu'il est plus pratique de faire un script bash appelant un ou deux programme python et d'autres commandes même si ça fait un peu salmigondis.
Regarde comment fonctionne un système unix, et tu auras moins de scrupules. C'est même la philosophie d'unix : des programmes qui font une seule chose (et la font bien), assemblés par des scripts shell. L'intérêt d'un langage comme Python est de remplir l'espace entre le C (bien pour des briques de bases, mais souvent de trop bas niveau pour la logique applicative) et les scripts shell.
Bref, tant que ce qu'il y a faire est assez stupide^Msimple pour du bash, pas de scrupules. Si ça commence à devenir trop compliqué, il sera temps de songer à ré-implémenter l'affaire en Python.
Mes 2 centimes...
BertrandB
Bref, tant que ce qu'il y a faire est assez stupide^Msimple pour du bash, pas de scrupules. Si ça commence à devenir trop compliqué, il sera temps de songer à ré-implémenter l'affaire en Python.
Mes 2 centimes...
Je dirais tant que ce que tu as faire est lisible en shell. Dès queça
devient tricky il vaut mieux passer à autre chose. On peut faire des trucs monstrueux même en bourne shell. Un collègue avait fait un rdbms avec SQL intégré. En bourne même pas en bash !
Remarque annexe vouloir utiliser Python à la place du shell peut donner des trucs aussi crapouto jetez un oeuil sur setup.py dans les sources de python.
Bref, tant que ce qu'il y a faire est assez stupide^Msimple pour du
bash, pas de scrupules. Si ça commence à devenir trop compliqué, il sera
temps de songer à ré-implémenter l'affaire en Python.
Mes 2 centimes...
Je dirais tant que ce que tu as faire est lisible en shell. Dès queça
devient tricky il vaut mieux passer à autre chose.
On peut faire des trucs monstrueux même en bourne shell. Un collègue
avait fait un rdbms avec SQL intégré. En bourne même pas en bash !
Remarque annexe vouloir utiliser Python à la place du shell peut donner
des trucs aussi crapouto jetez un oeuil sur setup.py dans les sources de
python.
Bref, tant que ce qu'il y a faire est assez stupide^Msimple pour du bash, pas de scrupules. Si ça commence à devenir trop compliqué, il sera temps de songer à ré-implémenter l'affaire en Python.
Mes 2 centimes...
Je dirais tant que ce que tu as faire est lisible en shell. Dès queça
devient tricky il vaut mieux passer à autre chose. On peut faire des trucs monstrueux même en bourne shell. Un collègue avait fait un rdbms avec SQL intégré. En bourne même pas en bash !
Remarque annexe vouloir utiliser Python à la place du shell peut donner des trucs aussi crapouto jetez un oeuil sur setup.py dans les sources de python.