user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 04-05-2015 20:23:24

IceF0x
#! Gourou Linux

notification de mises à jour avec bouton lanceur pour handylinux

Suite à cette discussion sur le forum de la V2 de handylinux: http://forum.handylinux.org/viewtopic.php?id=243 j'ai décidé de mettre mon grain de sel et de mettre une mise à jour à ce précédent tutoriel sur pynotify.
Comme je savais qu'il était possible de rajouter des actions au clic, j'en ai profité pour lire la doc et créer ce bout de code smile

1430765412_capture_d_ecran_-_04052015_-_20_46_25.png

1430768867_capture_d_ecran_-_04052015_-_21_30_57.png

#!/usr/bin/env python
# -*- coding: cp1252 -*-
# version: 0.3
# Under licence GPLv3 http://www.gnu.org/licenses/gpl.txt

import pygtk
pygtk.require('2.0')
import gtk
import pynotify
import sys
import os
import subprocess # commands
import locale

LOCALE = locale.setlocale(locale.LC_ALL, "")[0:2] # 'fr' or 'en'
NUMOFUPDATE = subprocess.check_output('aptitude search "~U" | wc -l', shell=True).rstrip('\n')  # commands.getoutput('aptitude search "~U" | wc -l')
RELEASE = subprocess.check_output('lsb_release -c -s', shell=True).rstrip('\n') # commands.getoutput('lsb_release -c -s')

if LOCALE == 'fr':
    LANG = 0
else:
    LANG = 1

if NUMOFUPDATE == '0':
    quit()

class language:  
    NUMBER_UPDATE_LABEL=[" mises à jours disponibles"," updates available"]
    CANCEL_BUTTON=["Annuler","Cancel"]
    UPDATE_BUTTON=["Mettre à jour","Update"]

def ignore_cb(n, action):
    assert action == "cancel"
    print "Abort"
    n.close()
    gtk.main_quit()

def default_cb(n, action):
    assert action == "default"
    if RELEASE == "wheezy":
        #commande pour handylinux V2
        os.system('update-manager')
        n.close()
        gtk.main_quit()
    else:
        #commande pour handylinux 1.9
        os.system('gpk-update-viewer')
        n.close()
        gtk.main_quit()

if __name__ == '__main__':
    if not pynotify.init("update-notifier"):
        sys.exit(1)

    n = pynotify.Notification(NUMOFUPDATE+ language.NUMBER_UPDATE_LABEL[LANG], "", "/usr/share/icons/NITRUX/apps/48/gnome-session-reboot.svg",)
    n.set_timeout(pynotify.EXPIRES_NEVER)
    n.add_action("cancel", language.CANCEL_BUTTON[LANG], ignore_cb)
    n.add_action("default", language.UPDATE_BUTTON[LANG], default_cb)

    if not n.show():
        print "Failed to send notification"
        sys.exit(1)

    gtk.main()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#2 07-05-2015 02:52:16

WangXiangzhai
Membre

Re : notification de mises à jour avec bouton lanceur pour handylinux

ok

1430959867.png

@+


PC: HP-pavilion a6227.fr | wifi: Awus036H et HWGUSB2-54 | CG: NVIDIA geforce 8400 GS | OS: Debian-8.1.0-i386 Xfce | EN TESTE kali-linux-openbox-rolling-i386.iso (KaliBang), bento-openbox-14.04.3-i386.iso et Viperr8_i686.iso

Hors ligne

#3 07-05-2015 16:19:56

WarLocG
#! modo de compet

Re : notification de mises à jour avec bouton lanceur pour handylinux

le module commands est déprécié depuis python 2.6

https://docs.python.org/2/library/commands.html

Deprecated since version 2.6: The commands module has been removed in Python 3. Use the subprocess module instead.

pour os.system(), la doc recommande également d'utiliser subprocess.call(commande, Shell=True)
https://docs.python.org/2/library/os.html#os.system
https://docs.python.org/2/library/subpr … -os-system

status = os.system("mycmd" + " myarg")
# becomes
status = subprocess.call("mycmd" + " myarg", shell=True)

Notes:

    * Calling the program through the shell is usually not required.

A more realistic example would look like this:

try:
    retcode = call("mycmd" + " myarg", shell=True)
    if retcode < 0:
        print >>sys.stderr, "Child was terminated by signal", -retcode
    else:
        print >>sys.stderr, "Child returned", retcode
except OSError as e:
    print >>sys.stderr, "Execution failed:", e

En résumé:

Voici une petite alternative à commands.getoutput() qui rendra également compatible python 3 (testé sous kali mais ca revient au même):

>>> subprocess.check_output('aptitude search "~U" | wc -l', shell=True).rstrip('\n')
'9'
>>> subprocess.check_output('lsb_release -c -s', shell=True).rstrip('\n')
'moto'

Après, je me suis renseigné sur gtk  également mais j'ai pas encore poussé mes tests plus loin:
https://python-gtk-3-tutorial.readthedo … stall.html

PyGObject is a Python module that enables developers to access GObject-based libraries such as GTK+ within Python. It exclusively supports GTK+ version 3 or later. If you want to use GTK+ 2 in your application, use PyGTK, instead.


Avant de poser vos questions, jeter un oeil ici
Mon CodeVault et Wiki : ici
Les messages privés envers le staff sont uniquement pour les cas d'urgence ou affaires privées (personnelles). Les demandes se feront exclusivement sur le forum. Merci de respecter cette clause sous peine de sanctions.

Hors ligne

#4 07-05-2015 16:29:49

IceF0x
#! Gourou Linux

Re : notification de mises à jour avec bouton lanceur pour handylinux

J'avais essayé avec subprocess, mais il me retournais toujours 0, donc je suis passé par commands après avoir fait une recherche sur mon souci et trouvé une soluce sur stackoverflow.

Je vais réessayer avec ta ligne de code.

Edit: je viens de modifier le code, j'attend d'avoir des mises à jours disponible pour tester.

Edit2: ça fonctionne nickel, merci smile


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

#5 28-05-2015 19:55:06

IceF0x
#! Gourou Linux

Re : notification de mises à jour avec bouton lanceur pour handylinux

Modification faite par Thuban suite à ce post sur le forum handy http://forum.handylinux.org/viewtopic.php?pid=4214

#!/usr/bin/env python
# -*- coding:Utf-8 -*- 
# Fichier: update-notifier-handylinux.py
# Cree le 26 mai 2015 22:53:30


"""

Auteur :      coyotus, thuban 
licence :     GNU General Public Licence

Description :
    Liste le nombre de mises à jour disponibles
"""

import pygtk
pygtk.require('2.0')
import gtk
import pynotify
import sys
import os
import locale
import apt
import lsb_release

def count_upgradeables_pkg():
    n = 0
    cache=apt.Cache()
    cache.open(None)
    for i in cache:
        if i.is_upgradable:
            n += 1
    return(n)


LOCALE = locale.setlocale(locale.LC_ALL, "")[0:2] # 'fr' or 'en'
NUMOFUPDATE = count_upgradeables_pkg()
RELEASE = lsb_release.get_distro_information()['CODENAME']

if LOCALE == 'fr':
    LANG = 0
else:
    LANG = 1

if NUMOFUPDATE == 0:
    quit()

class language:  
    NUMBER_UPDATE_LABEL=[" mises à jours disponibles"," updates available"]
    CANCEL_BUTTON=["Annuler","Cancel"]
    UPDATE_BUTTON=["Mettre à jour","Update"]

def ignore_cb(n, action):
    assert action == "cancel"
    print "Abort"
    n.close()
    gtk.main_quit()

def default_cb(n, action):
    assert action == "default"
    if RELEASE == "wheezy":
        #commande pour handylinux V2
        os.system('update-manager')
        n.close()
        gtk.main_quit()
    else:
        #commande pour handylinux 1.9
        os.system('gpk-update-viewer')
        n.close()
        gtk.main_quit()

if __name__ == '__main__':
    if not pynotify.init("update-notifier"):
        sys.exit(1)

    n = pynotify.Notification("{} {}".format(NUMOFUPDATE, language.NUMBER_UPDATE_LABEL[LANG]), "", "/usr/share/icons/NITRUX/apps/48/gnome-session-reboot.svg",)
    n.set_timeout(pynotify.EXPIRES_NEVER)
    n.add_action("cancel", language.CANCEL_BUTTON[LANG], ignore_cb)
    n.add_action("default", language.UPDATE_BUTTON[LANG], default_cb)

    if not n.show():
        print("Failed to send notification")
        sys.exit(1)

    gtk.main()

Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

Pied de page des forums