[python] infos pour dwm

Bonsoir.
Voulant afficher des informations dans la barre de status de dwm, j’ai utilisé pendant un moment un script shell qui récupérait toutes les infos.
Ce script tournait en boucle, et était tout de même assez lourd.
J’ai donc tenté de faire la même chose avec python, afin d’améliorer le temps d’éxécution et à vrai dire, ça fonctionne bien.
Cependant, je débute avec ce langage, donc toute idée de correction/amélioration sera la bienvenue, surtout pour la gestion d’erreur, ou pour faire une belle boucle infinie.

C’est écrit pour python3

Voici le script :
paste.isalo.org/53 <---- Le script

Je ne connais strictement rien à Python, ce post ne sera donc pas une aide sur le script, je voulais juste t’informer d’une initiative similaire en C : dwm.suckless.org/dwmstatus/

Je l’ai mis sur le pastbin de lol pour qu’il soit plus lisible : paste.isalo.org/53

Pour la boucle je vois pas pourquoi tu as utilisé sleep ainsi.
Voici ma proposition de boucle :

[code]upcoming = time.time() + 300 # Prochain test de connexion dans 10 min
while True :
mpdsong, mpdratio = mpdInfo()
mails = mailInfo()

if connected :      # Affichage des débits que si on est connecté
    net = wifi()
else :
    now = time.time()
    if (now > upcoming):
        connected = isconnected()
        upcoming = now + 300 # Prochain test de connexion dans 10 min
    net = ''

ginfo = geninfo()

# création de la ligne à afficher
info = '"{0} {1} {2} {0} {3} {4} {5}"'.format(c, mpdratio, mpdsong, mails, net, ginfo)

try :
    os.system('xsetroot -name '+info)       # pour dwm
except ImportError as err :
    print(err)

time.sleep(wait)[/code]

Alors :
[ul]
[li]un seul appel à sleep par itération[/li]
[li]utilisation de format parce que je trouve ça plus jolie (et potentiellement plus rapide)[/li]
[li]pour le test de connexion je limite le nombre d’appel à time.time() et je n’effectue qu’une seul fois toute les 10 minutes l’addition, c’est de la micro-optimisation qui ne sert à rien mais que j’aime bien :slightly_smiling: [/li][/ul]

Pour le reste à ta place pour chercher les information mpd j’aurais utilisé python-mpdclient ou python-mpd, mais c’est à peut prêt tout :wink:

@ eol : Oui, j’avais vu ce petit truc, mais je ne me sentais pas capable de me replonger dans un langage bas niveau comme le C pour ce que je voulais.

@ Misterfreeze : Merci pour tes conseils, c’est effectivement plus joli, plus propre, bref, je le sens mieux comme ça. Je vais modifier en fonction.
Pour l’utilisation de format, c’est clair que c’est mieux pour ajouter des espace!

Et l’idée de python-mpd… Il va falloir que je creuse, c’est intéressant!

Ça marche tout seul, et à vrai dire, quand je vois ta façon de faire je me demande ce que j’étais allé chercher!

Dommage pour python-mpd, il n’est disponible que pour python2, pas le 3…

C’est pas un peu chiant à gérer les nombreuses versions de python?

En termes de mise à jour de script, de portabilité ou autres?

En fait, c’est la première fois que le changement de version casse la continuité des codes (ça porte un nom mais j’ai oublié :s).
Python3 apporte tout un lot de nouveautés, améliorations et optimisations, c’est pour cela qu’il est conseillé de l’utiliser. Cependant, il reste de nombreuses bibliothèques à porter vers la version 3…
ceci dit, le script 2to3 fait ça très rapidement, il faudrait que je le teste sur python-mpd, voir ce que ça donne.

Enfin ce sera plus tard car ce soir, c’est montage de l’épisode 13 :slightly_smiling:

Si pleins d’ordinateurs ont plusieurs versions de python installées en parallèles.

D’ailleurs thuban, je crois qu’il est conseillé d’utiliser python3 dans le shaban plutôt que python.

Sinon pour tester la connexion tu peut utiliser stackoverflow.com/questions/3168 … -in-python).

C’est mieux avec example.net. :slightly_smiling:

Les solutions proposées pour faire un ping… La seule vraiment valable (qui ne va pas chercher tout pleins de trucs partout), c’est celle qui utilise le ping système. Faudra tester voir si ça accélère beaucoup le script.