N-PN White-Hat Project
[python] Jukebox - Version imprimable

+- N-PN White-Hat Project (https://dev.n-pn.fr/forum)
+-- Forum : Programmation (https://dev.n-pn.fr/forum/forumdisplay.php?fid=72)
+--- Forum : Langages interprétés (https://dev.n-pn.fr/forum/forumdisplay.php?fid=27)
+--- Sujet : [python] Jukebox (/showthread.php?tid=2751)



[python] Jukebox - InstinctHack - 25-02-2013

Salut,

Encore un script inutile, mais au combien plaisant \o/
dépendance : mplayer

beug, idée, etc, allez-y!

Pour le beug des quotes, je sais... (aussi pour l'insertion de code)

Code PYTHON :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os,random,time,sys

class Jukebox():
    def __init__(self,path,number,time,extensions):
        self.files=[]
        self.path=""
        self.number=0
        self.time=0
        self.extensions=[]

        if path[-1]!="/":
            path+="/"
        if os.path.isdir(path):
            self.path=path
            try:
                self.number=int(number)
            except:
                print("time incorrect")
            else:
                try:
                    time=int(time)
                except:
                    print("time incorrect")
                else:
                    if time>0:
                        self.time=time
                        self.extensions=extensions.split(",")
                        self.loop()
                    else:
                        print("c'est une blague ?")
        else:
            print("path incorrect")

    def loop(self):
        while self.number!=0:
            self.maj_bdd()
            self.listen()
            time.sleep(5)
            self.number-=1

    def maj_bdd(self):
        self.files=[]
        self.parcours_rep(self.path)

    def parcours_rep(self,rep):
        for element in os.listdir(rep):
            if os.path.isdir(rep+element):
                self.parcours_rep(rep+element+"/")
            elif os.path.isfile(rep+element):
                if "." in element:
                    extension=element.split(".")[-1]
                    if extension in self.extensions:
                        self.files.append(rep+element)

    def listen(self):
        if len(self.files)>0:
            os.system('mplayer "'+self.files[random.randint(0,len(self.files)-1)]+'"')
        else:
            print("Aucun fichier n'as était trouver...")

if len(sys.argv)==5:
    Jukebox(sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4])
else:
    print("Lancer ce script avec 3 paramètres")
    print("le premier est le path de votre bibliothèque multimédia")
    print("le deuxième le nombre de média lu souhaité (-1 pour infini)")
    print("le troisième le temps entre la lecture de chaque média")
    print("le quatrième les extensions des médias 3 souhaités, séparées par des virgules")
 



RE: [python] Jukebox - gruik - 25-02-2013

(25-02-2013, 00h56)khaled a écrit : os.system(...)

oh nooees Big Grin

t'aurais moyen de faire moins inutile en utilisant un binding fait pour, m'est avis
pis si t'avais moyen de mettre quelques maigres commentaires ce serait joie


RE: [python] Jukebox - InstinctHack - 25-02-2013

J'ai test d'install le truc, mais j'ai un problème de socket...
j'ai quand même commenté mon code :
Code PYTHON :

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os,random,time,sys

class Jukebox():
    """
        Classe qui représente un jukebox
    """

    def __init__(self,path,number,time,extensions):
        """
            Function appellée à l'initialisatation de l'objet
        """


        #Initialisation des variables
        #uniquement pour avoir la liste des variables de l'objets et de leur types
        self.files=[]
        self.path=""
        self.number=0
        self.time=0
        self.extensions=[]

        if path[-1]!="/":#si il manque un / à la fin du path passé en paramètre, on lui rajoute
            path+="/"
        if os.path.isdir(path):#si le path existe
            self.path=path#on le met de coté
            #on essaye de transtyper le parametre en nombre
            try:
                self.number=int(number)
            except:#si une erreur survient, c'est que c'était pas un nombre
                print("time incorrect")
            else:#sinon si tout s'est bien passé
                #on fait la même avec time, mais cette fois, on vérifie en plus qu'il est positif, non nul
                try:
                    time=int(time)
                except:
                    print("time incorrect")
                else:
                    #si c'est bon, on met de coté
                    if time>0:
                        self.time=time
                        self.extensions=extensions.split(",")#on split le paramètre extensions avec "," pour obtenir la liste des extensions autorisées
                        self.loop()
                    else:
                        print("c'est une blague ?")#un delai d'attente négatif ? je veut pareil au ciné :>
        else:
            print("path incorrect")

    """
        Function qui tourne tant qu'elle n'as pas lu le nombre de média demandé
    """

    def loop(self):
        while self.number!=0:#on met != et pas >0 car on as pus lui passer un nombre négatif afin de faire une boucle infinie
            self.maj_bdd()#on met à jour la liste des médias
            self.listen()#on en écoute un
            time.sleep(self.time)#on attend le temps qu'il faut
            self.number-=1#on décrémente et c'est repartie \o/

    """
        Function dont le but est de être à jour la liste des médias
    """

    def maj_bdd(self):
        self.files=[]#on supprime ce qui existe
        self.parcours_rep(self.path)#on parcours récursivement le path passé en paramètre

    """
        Function qui parcours un repertoire et s'appelle elle-meme si elle tombe sur un répertoire,
        et ajoute tous les fichiers qui correspondent aux extensions passsés en paramètres
    """

    def parcours_rep(self,rep):
        for element in os.listdir(rep):#on parcours les elements du repertoire
            if os.path.isdir(rep+element):#si c'est un répertoire
                self.parcours_rep(rep+element+"/")#on refait un tour de petit train
            elif os.path.isfile(rep+element):#sinon si c'est un fichier
                if "." in element:#on vérifie qu'un point existe dans le nom du fichier
                    extension=element.split(".")[-1]#on récupère l'extension du fichier
                    if extension in self.extensions:#si elle match avec la liste
                        self.files.append(rep+element)#on l'ajoute avec le reste des médias

    """
        Function qui choisi un média au hasard, et le lit
    """

    def listen(self):
        if len(self.files)>0:#car on ne fait pas un randint(0,0)
            os.system('mplayer "'+self.files[random.randint(0,len(self.files)-1)]+'"')
        else:
            print("Aucun fichier n'as était trouver...")

if len(sys.argv)==5:#si il y a 4 arguments
    Jukebox(sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4]) #créer une instance, et lui passer les arguments
else:
    print("Lancer ce script avec 4 paramètres")
    print("le premier est le path de votre bibliothèque multimédia")
    print("le deuxième le nombre de média lu souhaité (-1 pour infini)")
    print("le troisième le temps entre la lecture de chaque média")
    print("le quatrième les extensions des médias 3 souhaités, séparées par des virgules")