Pages : 1
#1 Le 25/07/2010, à 20:26
- wido
[Python] Vos scripts utiles
Bonjour,
ce post a pour unique but de recenser vos scripts utiles ou pas uniquement codés en python.
Ceci permettra au débutant (comme moi) d'avoir des exemples pour en apprendre d'avantage.
Sommaire:
Script Python:
Monter les fichiers iso
Éteindre l'écran
Fenêtre de déconnexion spécifiquement pour openbox
Débat:
Début de débat Python/bash pour certaine fonction.
Dernière modification par wido (Le 07/08/2010, à 15:54)
Hors ligne
#2 Le 28/07/2010, à 08:09
- Airballman
Re : [Python] Vos scripts utiles
[abonnement]
airballman@jabber.ubuntu-fr.org
Traitement d'images, systèmes embarqués et autres astuces Linux!
Hors ligne
#3 Le 30/07/2010, à 20:05
- wido
Re : [Python] Vos scripts utiles
Fenêtre avec 4 boutons (quitter openbox,rebooter,eteindre,annuler)
crée sous idle3 pour python3 et archlinux.
#!/usr/bin/env python
# -*- coding:Latin-1 -*-
#=================
# Dependance:
# python, tk, dbus, openbox
from Tkinter import *
import os
# Logout
def logout():
os.system('openbox --exit')
# Reboot
def reboot():
os.system('dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Reboot')
# Shutdown
def shutdown():
os.system('dbus-send --system --print-reply --dest="org.freedesktop.Hal" /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown')
fen1 = Tk()
fen1.title("Openbox")
fen1.maxsize(width=300, height=60)
fen1.minsize(width=150, height=30)
fen1.resizable(width=YES, height=NO)
bou1 = Button(fen1, text='Eteindre', command=shutdown)
bou1.pack(side=LEFT)
bou2 = Button(fen1, text='Redémarrer', command=reboot)
bou2.pack(side=LEFT)
bou3 = Button(fen1, text='Logout', command=logout)
bou3.pack(side=LEFT)
bou4 = Button(fen1, text='Annuler', command=fen1.quit)
bou4.pack(side=LEFT)
fen1.mainloop()
fen1.destroy()
Dernière modification par wido (Le 30/07/2010, à 20:07)
Hors ligne
#4 Le 31/07/2010, à 20:30
- nesthib
Re : [Python] Vos scripts utiles
[abonnement aussi]
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 31/07/2010, à 20:55
- Kanor
Re : [Python] Vos scripts utiles
[abonnement] (vivement la prochaine version du forum)
Hors ligne
#6 Le 04/08/2010, à 21:54
- wido
Re : [Python] Vos scripts utiles
petite fenêtre avec comme fonction: éteindre l'écran (police rouge)
#!/usr/bin/env python
# -*- coding:Latin-1 -*-
#=================
# Dependance:
# python, tk
from Tkinter import *
import os
# Eteindre l'ecran
def blackall():
os.system('xset dpms force off')
fen1 = Tk()
fen1.title("Ecran")
bou1 = Button(fen1, text="Eteindre l'écran", fg='red', command=blackall)
bou1.pack()
bou4 = Button(fen1, text='Annuler', command=fen1.quit)
bou4.pack()
fen1.mainloop()
fen1.destroy()
Dernière modification par wido (Le 04/08/2010, à 21:55)
Hors ligne
#7 Le 04/08/2010, à 22:06
- Airballman
Re : [Python] Vos scripts utiles
Bon ca fait une semaine que je me dis qu'il faut que je poste
Le premier script Python que j'ai fait, modifié à partir d'un bouquin d'exo dont je ne me rappelle plus la source.... (Hesitez pas à la rajouter si vous trouvez!
N'ayant jamais réussi à utiliser find correctement , voici docfinder. Il liste les fichiers de lextension demandée ds le répertoire demandé (c'est récursif).
#!/usr/bin/python
#_*_ coding: ISO-8859-15 _*_
import os
import sys
def scan_rep(repertoir, extension):
"""scanne le rep courant pour trouver des tex"""
for racine, reps, fichiers in os.walk(repertoir, topdown=True):
for fichier in fichiers:
if fichier.endswith('.%s' % extension):
nom_complet=os.path.join(racine, fichier)
print '%s '%\
(nom_complet)
if __name__=='__main__':
#scan_rep('/media/sda3','tex')
scan_rep(sys.argv[1],sys.argv[2])
A Utiliser comme ca :
docfinder repertoire extension
airballman@jabber.ubuntu-fr.org
Traitement d'images, systèmes embarqués et autres astuces Linux!
Hors ligne
#8 Le 04/08/2010, à 22:22
- nesthib
Re : [Python] Vos scripts utiles
@Airballman : pour le coup c'est un bon exemple où il est inutile de faire un script python…
utiliser la fonction find est bien plus approprié car elle est grandement optimisée pour sa fonction : la recherche.
rien qu'un exemple, si tu lances 2 fois de suite une même commande find tu bénéficies d'un cache des dernières réponses.
après si tu ne te souviens pas comment utiliser la commande tu peux te faire une fonction bash pour ça.
function recherche () {
find "$1" -name '*.'$2
}
je suis le premier à défendre le python mais pas pour n'importe quel usage
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#9 Le 04/08/2010, à 22:25
- projexa
Re : [Python] Vos scripts utiles
je m'abonne
Penser est difficile, c'est pourquoi la plupart se font juges.
mon album fleur : https://picasaweb.google.com/109666919152955060370
ma passion les marche de l'entre Sambre et Meuse: https://picasaweb.google.com/1096669191 … breEtMeuse
Hors ligne
#10 Le 04/08/2010, à 22:26
- Airballman
Re : [Python] Vos scripts utiles
@nesthib : Cool merci !
Alors en fait je précise : J'utilise jamais ce script , c'est le premier que j'ai fait pour apprendre Python! Ca m'a notamment permis de comprendre le __main__ d'ou son utilité
Pour chercher des fichiers k'en suis encore à ctrl+ f ds gnome
Peut etre que tu vas me permettre de changer ca
airballman@jabber.ubuntu-fr.org
Traitement d'images, systèmes embarqués et autres astuces Linux!
Hors ligne
#11 Le 04/08/2010, à 23:33
- HP
Re : [Python] Vos scripts utiles
après si tu ne te souviens pas comment utiliser la commande tu peux te faire une fonction bash pour ça.
function recherche () { find "$1" -name '*.'$2 }
je suis le premier à défendre le python mais pas pour n'importe quel usage
Perso, j'ai çà :
function search () {
for i in "$@"; do
( find -iname "*$i*" | grep -i "$i" --color=auto ) 2> /dev/null;
done
}
Je m'en sers de temps à autre…
cat /dev/urandom >/dev/null 2>&1 #github
Hors ligne
#12 Le 05/08/2010, à 00:21
- nesthib
Re : [Python] Vos scripts utiles
@HP : sympa
sinon j'ai peur que wido fasse la tête si on se met à balancer trop de bash dans le fil ^^
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#13 Le 07/08/2010, à 14:09
- wlourf
Re : [Python] Vos scripts utiles
bonne idée ce topic, je m'abonne et je poste celui-ci qui permet de lister les derniers fichiers modifiés dans un dossier (et ses sous-dossiers) passé en paramètre. Si il y a plus simple en bash ou autre, je suis preneur
(Je m'en sers pour afficher les résultats dans un conky)
#!/usr/bin/env python
# coding=latin-1
#script permettant de lister les derniers fichiers modifiés dans un répertoire
#et ses sous-répertoires
#paramètre 1 : chemin du dossier
#paramètre 2 : nb de fichiers à afficher
#paramètre 3 : filtre sur les noms de fichiers à ne pas afficher
# (facultatif,séparés par des virgules)
import sys, os
import string
from datetime import date, datetime
from stat import *
import math
def lister(rep,repRacine):
#liste les fichiers d'un répertoire, récurisivement
#retourne un tableau de ces fichiers (path+name)
for filename in os.listdir(rep):
#print ("--")
pathname = os.path.join(rep, filename)
#print (pathname)
mode=os.stat(pathname)[ST_MODE]
if S_ISREG(mode):
if flagFiltre:
flag=False
for i in listeFiltres:
if filename.lower().find(i.lower()) !=-1:
flag=True
break
if not flag:
arrRes.append([os.stat(pathname).st_mtime,pathname])
else:
arrRes.append([os.stat(pathname).st_mtime,pathname])
if S_ISDIR(mode):
lister(pathname,repRacine)
return arrRes
if __name__ == '__main__':
#initialisation des tableaux
arrRes=[] #tableau de résultats après lecture d'un répertoire
#si nb arg incorrect?
if len(sys.argv)<3:
print u"\nNb d'arguments incorrects : "
print u"\t1-répertoire à scruter"
print u"\t2-nb de fichiers à afficher"
print u"\t3-filtres sur noms de fichiers "+ \
"(facultatif, séparés par des virgules)\n"
exit()
else:
#récupère le répertoire
rep0=sys.argv[1]
nb=sys.argv[2]
if not os.path.exists(rep0):
print rep0+ " : répertoire non valide, interruption"
exit()
if not nb.isdigit():
print nb + " : nombre entier non valide"
exit()
nb=int(nb)
#liste les filtres
flagFiltre=False
if len(sys.argv)==4:
listeFiltres=sys.argv[3].split(",")
flagFiltre=True
print
arrList=lister(rep0,rep0)
arrList.sort()
if nb>len(arrList):
nb=len(arrList)
#calule la largeur maxi de la colonne "Dossier"
lengthD=0
lengthN=0
for f in range(1,nb+1):
x= arrList[-f]
lengthD=max(len(os.path.dirname(x[1])),lengthD)
lengthN=max(len(os.path.basename(x[1])),lengthN)
for f in range(1,nb+1):
x= arrList[-f]
bname = os.path.basename(x[1])
dname = os.path.dirname(x[1])
sname = os.path.getsize(x[1])
if sname<1024 :
sname = str(sname) + " o"
elif sname<1024*1024:
sname = str(sname/1024) + " Ko"
elif sname<math.pow(1024,3):
sname = "%.1f" %(sname/math.pow(1024,2)) + " Mo"
elif sname<math.pow(1024,4):
sname = "%.1f" %(sname/math.pow(1024,3)) + " Go"
print datetime.fromtimestamp(x[0]),string.replace(dname,rep0,"")+ \
" "*(lengthD-len(dname)),bname+" "*(lengthN-len(bname)), \
" "*(10-len(sname))+sname
En sortie, on a 4 colonnes : date/heure; dossier, nom du fichier, taille. Par contre je n'arrive pas à avoir la dernière colonne bien alignée quand il y a des accents dans le nom de fichier ...
Hors ligne
#14 Le 07/08/2010, à 14:38
- nesthib
Re : [Python] Vos scripts utiles
@wlourf : oui il y a beaucoup plus simple en bash
il te suffit de créer un fichier en imposant la date de création avec touch -t date
puis une recherche avec find et l'option -newer trouvera les fichiers plus récents que celui ci
par exemple j'ai fait le script suivant pour synchroniser les fichiers pdf contenus dans un ensemble de dossiers (contenus dans ZOTERO_FOLDER) vers un seul dossier sur ma clé USB (USB_FOLDER). le script utilise un fichier vide (ref) dont la date de création sert de référentiel pour savoir quand a eu lieu la dernière synchronisation.
#! /bin/bash
# define working directories
ZOTERO_FOLDER="/home/…"
USB_FOLDER="/media/…"
cd ${ZOTERO_FOLDER}
# print last synchro date
echo "dernière synchronisation : "$(ls -l ref | awk '{print $6" "$7}')
# listing mode, only show new files
if [[ "${1}" == "-l" ]]
then
find ./ -name '*.pdf' -newer ref
exit
fi
# find PDF newer than last synchronisation and send to the USB stick
while read line
do
cp "${line}" "${USB_FOLDER}" && echo "synchro : ${line}" || echo "/!\ erreur : ${line}"
done < <(find ./ -name '*.pdf' -newer ref)
# update reference file for next synchro
touch -t $(date +'%Y%m%d%H%M') ref
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#15 Le 07/08/2010, à 15:32
- wido
Re : [Python] Vos scripts utiles
sinon j'ai peur que wido fasse la tête si on se met à balancer trop de bash dans le fil ^^
Sinon ce sujet n'a aucun intérêt
Hors ligne
#16 Le 07/08/2010, à 15:43
- nesthib
Re : [Python] Vos scripts utiles
d'accord avec toi mais je trouve aussi intéressant de montrer la comparaison (sans aller plus loin sur ce fil) lorsque le python n'est pas le plus adapté (ce qui est typiquement le cas pour les deux derniers scripts). Savoir choisir une solution adaptée à un problème est très important AMHA.
j'adore le python mais faire un script de 50 lignes là où 2 lignes de bash font la même chose est une erreur je pense
sinon il serait sympa que tu dédies le 1er message du fil pour faire un sommaire.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#17 Le 07/08/2010, à 15:47
- wido
Re : [Python] Vos scripts utiles
Monter un iso dans un dossier:
#!/usr/bin/env python
import os
iso_file = os.popen("zenity --file-selection").read().strip()
if not iso_file: exit(0)
mount_point=os.popen("zenity --file-selection --directory").read().strip()
if not mount_point:
print "Error: Mount point not specified"
exit(-1)
mount_command = 'mount -o loop "%s" "%s"'% (iso_file, mount_point)
print(mount_command)
result = os.system(mount_command)
if result!=0:
print "Error: Couldn't mount ISO file"
Hors ligne
#18 Le 07/08/2010, à 16:13
- wlourf
Re : [Python] Vos scripts utiles
@nesthib, en effet ton script bash est impressionnant (au moins pour moi) mais après je ne suis pas sûr de savoir trier et afficher les résultats du plus récent au plus ancien...
Sinon, j'avais du faire ça au boulot sous Windows (où je ne peux pas installer ce que je veux), donc à la limite on peut dire que le script est "portable" et on peut discuter du code qui doit pas être tiptop non plus
a+
Hors ligne
Pages : 1