Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/12/2012, 14h53   #1
flipflip
Invité régulier
 
Inscription : mai 2008
Messages : 30
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 30
Points : 6
Points : 6
Par défaut Piloter rsync sans passer par os.

Bonjour,

J'ai actuellement mon script de backup (backupeur) écrit en bash et depuis quelque temps j'envisage de re-écrire. Mon script utilise rsync pour gérer la copie mais autour il y a la rétention, les notifications par mail, les logs...

Il est composé en plusieurs plugins suivant l'action à faire.

Avant de commencer et après quelques recherches (sans résultats) je voudrais savoir si rsync pour être totalement piloté via python ou alors via les commandes os ?

Merci d'avance.
flipflip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 10h37   #2
plxpy
Membre émérite
 
Avatar de plxpy
 
Homme
Ingénieur
Inscription : janvier 2009
Messages : 494
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2009
Messages : 494
Points : 893
Points : 893
Bonjour,

Avant de commencer je n'ai pas trop compris le titre "Piloter rsync sans passer par os" et, plus loin, "... totalement piloté via python ou alors via les commandes os ?". Ca me semble contradictoire mais je me lance quand même.

De façon générale, dans un environnement Unix/Linux, tout ce que tu fais dans un shell script peut être fait dans un script Python. Pas besoin de parcourir très longtemps les modules "plutôt" système de Python et de voir les noms des fonctions proches de ceux des fonctions C ou des commandes Unix pour "deviner" que tout ça, à la base, baignait plutôt dans un environnement Unix / Unix-like. Le passage shell script => script Python se fait donc généralement en douceur et sans casse. L' "unixien" n'est pas vraiment dépaysé.

"Piloter" rsync - comme ça doit être le cas dans ton bash actuel - va consister à écrire/générer une ou des commandes rsync avec les options et les arguments qui vont bien et à l'exécuter soit très directement via os.system, soit via le module subprocess (Popen, call, ...) en gérant plus finement l'entrée et les sorties standards ainsi que les codes retour.

Pour les "à côtés" (rétention (c'est quoi ?), les notifications par mails et les fichiers logs), il y a tout ce qu'il faut en Python pour faire ça et, au pire, si c'est trop fouillé ou que tu n'arrives pas à t'en débrouiller du premier coup, tu peux toujours, comme avec rsync, faire faire ça par le shell. Attention, quand même, à ce que ton script Python final ne soit pas qu'une longue liste de os.system() ...

Personnellement, je trouve que Python est très bien adapté à ce genre de développement et est un très bon compromis entre le bash qui est très macroscopique (et - allez je le dis - parfois très lourdingue et d'une lisibilité toute relative) et le C où il faut tout faire.

Bref : lance toi !
plxpy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 11h39   #3
flipflip
Invité régulier
 
Inscription : mai 2008
Messages : 30
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 30
Points : 6
Points : 6
Salut,
Merci de te lancer

Citation:
Avant de commencer je n'ai pas trop compris le titre "Piloter rsync sans passer par os" et, plus loin, "... totalement piloté via python ou alors via les commandes os ?". Ca me semble contradictoire mais je me lance quand même.
En fait je voulais savoir si il y existe un module à importer dans python pour utiliser les fonctions rsync ou bien si il faut passer par os.system(rsync....) comme je le fais actuellement avec bash.

La plus grosse raison de vouloir passer de bash à python est au niveau de la gestion de la configuration. En bash il est difficile de gérer des tableaux multiniveaux alors qu'en python y a tout ce qu'il faut. Accessoirement j'envisage de créer une interface web avec django.

C'est surtout au niveau de rsync que je me pose des questions, pour les mails, les logs j'ai déjà fais dans d'autres scripts python donc pas de problèmes.

La rétention c'est le nombre de jour, version de sauvegarde que tu souhaite conserver en historique.
flipflip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 11h49   #4
plxpy
Membre émérite
 
Avatar de plxpy
 
Homme
Ingénieur
Inscription : janvier 2009
Messages : 494
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : janvier 2009
Messages : 494
Points : 893
Points : 893
Concernant le choix de passer d'un shell script à Python, je pense qu'on est sur la même longueur d'onde ...

Sinon, sur PyPI (Python Package Index) une recherche "rsync" te donne ça.

Par contre, je n'ai rien testé.
plxpy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 13h19   #5
flipflip
Invité régulier
 
Inscription : mai 2008
Messages : 30
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 30
Points : 6
Points : 6
En bon débutant je ne connaissais pas PyPi

Je pense que je vais commencer le portage en python en lancant rsync par os.system. Ca sera la première étape.

Merci pour toute tes réponses.
flipflip est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 08h06   #6
ripat
Membre Expert
 
Inscription : mai 2004
Messages : 768
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : mai 2004
Messages : 768
Points : 1 080
Points : 1 080
Ne jetons pas trop vite bash aux orties. Je viens moi-même de convertir un simple script bash (dash en réalité) qui lance plusieurs requêtes http simultanées vers un serveur web: 10 lignes de code. Mon script python en fait 55. Le multiprocessing en bash est d'une simplicité enfantine, mais c'est nettement plus ardu en python pour qui n'en fait pas tous les jours.

En ce qui concerne rsync, j'ai jeté un coup d'oeil au code de rsync.py et, sans enlever de mérite à son auteur, il lui manque la caractéristique essentielle de rsync: la synchronisation par rolling-checksum. Le script python semble se limiter à la comparaison des os.stat() pour décider si un fichier doit être sauvegardé ou pas.

Si tu veux vraiment utiliser la puissance du rolling-checksum, regarde ce lien. Mais tu risques de te retrouver avec un code gigantesque pour remplacer une seule ligne de bash...

Citation:
"Do one thing well"
This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together.
http://en.wikipedia.org/wiki/Unix_philosophy
__________________
:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
:quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
Jabber: ripat at im.apinc.org
ripat est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h18.


 
 
 
 
Partenaires

Hébergement Web