Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

manipulation chaines - remplacant string.replace() - append d'un fichier vhost apache

31 réponses
Avatar
R12y
Bonjour,

Pour des raison didactiques, je me suis lancé dans la traduction en
python de mes scripts shell. Du moins pour ceux qui pouvaient se
transformer ainsi, sans heurts.

Parmis eux, un script qui consiste à ajouter une section de VHost à
apache.
Pour faire court, une section Vhost apache est un morceau de texte
ressemblant à ceci:

<VirtualHost *>
ServerName www.toto.fr
ServerAlias toto.fr
DocumentRoot /home/toto
</VirtualHost>

En vrai sur mon apache cette section fait environ 15 lignes mais tous les
Vhosts ont la même tronche.

Le cript chell actuel, s'invoque comme ceci:
$ addvhost.sh toto.fr

Il s'occupe avec un coup de awk à isoler le "toto" du "fr" pour former la
chaîne /home/toto et puis le reste va tout seul. Ce n'est que mise bout
à bout de choses simples.

J'ai donc un modèle (template?) de Vhost, qui rapporté à notre exmple
serait:

<VirtualHost *>
ServerName FQDN
ServerAlias DN
DocumentRoot HOMEDN
</VirtualHost>

Et le scrip remplaçait les mot en majuscules par ce qu'il faut.
Maintenant j'en viens aux questions.

Vaut-il mieux que je conserve le modèle en dur dans le même fichier que
le script? dans un fichier séparé? Dans la mesure ou ce script ne sera
utilisé que quand on ajoute un Vhost, c'est à dire une fois par semaine
tout au plus.

J'ai été surpris que dans python 2.4, replace(), du module strig est
dans la catégorie des fonctions dépréciées. Mais il n'est indiquée
nulle part dans le chapitre la fonction qui est censée la remplacer.
Laquelle est-elle s'il vous plait?

Merci.

--
SPIP, phpNuke, Plone, opengroupware... c'est bien
CPS c'est mieux: http://www.cps-project.org/
Hébergement de sites CPS: http://www.objectis.org/

10 réponses

1 2 3 4
Avatar
News M Claveau /Hamster-P
Hi !

string.replace( est remplaçable par .replace(

@-salutations
--
Michel Claveau
Avatar
William Dode
On 12-09-2005, R12y wrote:
Bonjour,

Pour des raison didactiques, je me suis lancé dans la traduction en
python de mes scripts shell. Du moins pour ceux qui pouvaient se
transformer ainsi, sans heurts.

Parmis eux, un script qui consiste à ajouter une section de VHost à
apache.
Pour faire court, une section Vhost apache est un morceau de texte
ressemblant à ceci:

<VirtualHost *>
ServerName www.toto.fr
ServerAlias toto.fr
DocumentRoot /home/toto
</VirtualHost>

En vrai sur mon apache cette section fait environ 15 lignes mais tous les
Vhosts ont la même tronche.

Le cript chell actuel, s'invoque comme ceci:
$ addvhost.sh toto.fr

Il s'occupe avec un coup de awk à isoler le "toto" du "fr" pour former la
chaîne /home/toto et puis le reste va tout seul. Ce n'est que mise bout
à bout de choses simples.

J'ai donc un modèle (template?) de Vhost, qui rapporté à notre exmple
serait:

<VirtualHost *>
ServerName FQDN
ServerAlias DN
DocumentRoot HOMEDN
</VirtualHost>

Et le scrip remplaçait les mot en majuscules par ce qu'il faut.
Maintenant j'en viens aux questions.

Vaut-il mieux que je conserve le modèle en dur dans le même fichier que
le script? dans un fichier séparé? Dans la mesure ou ce script ne sera
utilisé que quand on ajoute un Vhost, c'est à dire une fois par semaine
tout au plus.


C'est kif kif pour le cas présent...
Par contre comment feras-tu si tu veux par exemple changer une option
dans un vhost ? Pour ma part je stocke toutes mes infos dans une base de
données et j'ai un script qui génère les vhosts à partir de la.

ps: si ça t'intéresse je fait aussi la même chose pour toute la clique
(proftpd, courier-imap-pop, exim, webalizer, bind, mysql, postgresql,
spambayes), c'était parti d'un projet collectif mais je me retrouve tt
seul dessus. Ca pourrait le redevenir.

--
William Dodé - http://flibuste.net

Avatar
Christophe
J'ai été surpris que dans python 2.4, replace(), du module strig est
dans la catégorie des fonctions dépréciées. Mais il n'est indiquée
nulle part dans le chapitre la fonction qui est censée la remplacer.
Laquelle est-elle s'il vous plait?


En fait, c'est le module string qui se deprecie car ses fonctionalitées
sont portées en tant que fonctions membres des chaines elles mêmes. Donc
ton string.replace("chaine","old","new") deviens donc
"chaine".replace("old","new")

Avatar
Damien Wyart
Salut,

* R12y in fr.comp.lang.python:
Dans quelle section de la doc se trouvent toutes ces fonctions membres
de la chaine?


<http://www.python.org/doc/2.4.1/lib/string-methods.html>

--
DW

Avatar
R12y
On Mon, 12 Sep 2005 10:08:50 +0200, Christophe wrote:

string.replace("chaine","old","new") deviens donc
"chaine".replace("old","new")


Merci.
Dans quelle section de la doc se trouvent toutes ces fonctions membres
de la chaine?

Et supposons qu'on veuille ajouter une fonction, on crée une autre classe
de la classe String et on rajoute la fonction en question?

--
SPIP, phpNuke, Plone, opengroupware... c'est bien
CPS c'est mieux: http://www.cps-project.org/
Hébergement de sites CPS: http://www.objectis.org/

Avatar
Laurent Pointal
R12y wrote:
On Mon, 12 Sep 2005 10:08:50 +0200, Christophe wrote:


string.replace("chaine","old","new") deviens donc
"chaine".replace("old","new")



Merci.
Dans quelle section de la doc se trouvent toutes ces fonctions membres
de la chaine?

Et supposons qu'on veuille ajouter une fonction, on crée une autre classe
de la classe String et on rajoute la fonction en question?


Tu crées un module, et tu places ta fonction dedans - simple, lisible,
efficace.

Tu peux bien sûr créer une sous-classe de str... mais je ne suis pas sûr
que tous les modules apprécient (ie. il faut vraiment avoir une bonne
raison pour faire une sour-classe de str). De plus, ne pas oublier qu'il
existe aussi les chaînes unicode (dont tu risques d'avoir besoin si tu
manipules des chaînes accentuées).

class MyStr(str) :
... def mametode(self) :



... print self
...


s=MyStr("Coucou")
s.mametode
<bound method MyStr.mametode of 'Coucou'>



s.mametode()
Coucou










Avatar
Christophe
On Mon, 12 Sep 2005 10:08:50 +0200, Christophe wrote:


string.replace("chaine","old","new") deviens donc
"chaine".replace("old","new")



Merci.
Dans quelle section de la doc se trouvent toutes ces fonctions membres
de la chaine?


De la doc je ne sais pas mais tu peux la retrouver en fesant help(str)

Et supposons qu'on veuille ajouter une fonction, on crée une autre classe
de la classe String et on rajoute la fonction en question?


Ce n'est pas conseillé de faire ça. C'est en général trop le bordel de
toute façon :)

Je ne pense pas qu'il y ait une façon simple d'ajouter de nouvelles
methodes dans str.


Avatar
Jerome

Et supposons qu'on veuille ajouter une fonction, on crée une autre classe
de la classe String et on rajoute la fonction en question?



Ce n'est pas conseillé de faire ça. C'est en général trop le bordel de
toute façon :)


C'est le principe même de la programmation objet pourtant...


Je ne pense pas qu'il y ait une façon simple d'ajouter de nouvelles
methodes dans str.



class MyString(str):

def double(self):
s = ''
for i in range(len(self)):
s += self[i]*2
return s

s = MyString("abcde")
print s.double()


Avatar
R12y
On Mon, 12 Sep 2005 13:41:33 +0200, Jerome wrote:
Je ne pense pas qu'il y ait une façon simple d'ajouter de nouvelles
methodes dans str.
class MyString(str):



Je pense que le "bordel" auquel il faisait allusion est qu'en en faisant
ça, on a des strings _et_ des MyString dans le binz...

--
SPIP, phpNuke, Plone, opengroupware... c'est bien
CPS c'est mieux: http://www.cps-project.org/
Hébergement de sites CPS: http://www.objectis.org/


Avatar
Jerome
R12y wrote:
On Mon, 12 Sep 2005 13:41:33 +0200, Jerome wrote:

Je ne pense pas qu'il y ait une façon simple d'ajouter de nouvelles
methodes dans str.


class MyString(str):



Je pense que le "bordel" auquel il faisait allusion est qu'en en faisant
ça, on a des strings _et_ des MyString dans le binz...



oui mais un objet MyString est aussi une chaine classique, tu peux
l'utiliser telle quelle dans toutes les fonctions qui prennent des
chaînes en paramètres de façon transparente.

def func(s1, s2):
print s1.lower() + s2.upper()

func('begin', MyString('end'))
func('begin', 'end')
func(MyString('begin'), MyString('end'))


A partir du moment où tu sais ce que tu fais, tout est possible ;-)



1 2 3 4