Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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]

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] smile


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile
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 big_smile, 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

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 wink


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile


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 smile!

Alors en fait je précise : J'utilise jamais ce script smile, c'est le premier que j'ai fait pour apprendre Python! Ca m'a notamment permis de comprendre le __main__ d'ou son utilité tongue
Pour chercher des fichiers k'en suis encore à ctrl+ f ds gnome

Peut etre que tu vas me permettre de changer ca smile

Hors ligne

#11 Le 04/08/2010, à 23:33

HP

Re : [Python] Vos scripts utiles

nesthib a écrit :

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 wink

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 wink

sinon j'ai peur que wido fasse la tête si on se met à balancer trop de bash dans le fil ^^


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 big_smile

(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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#15 Le 07/08/2010, à 15:32

wido

Re : [Python] Vos scripts utiles

nesthib a écrit :

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 roll

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 smile

sinon il serait sympa que tu dédies le 1er message du fil pour faire un sommaire.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile
a+

Hors ligne