Otra API de Python para acceder libnotify , junto con el soporte de sonido de notificación (con vlc Backend) .

PRECAUCIÓN: Bueno, debe pasar por una rigurosa instalación Prodecure, que puede no ser una elección preferida siempre. Pero está bastante seguro, podrás aprender algo nuevo.
Demostraré un procedimiento de instalación en Solus Linux .
gcc , glibc , glibc-devel . Usaré gcc 9.3.0 . $ sudo eopkg it gcc, glibc, glibc-devel
$ gcc --version # check versionCython , también instalaremos pip . Estoy usando Python3.7.6 . $ sudo eopkg it python3, python3-devel, pip
$ python3 --version
$ python3 -m pip install --user Cythonlibnotify , libnotify-devel , que nos dará una interfaz programática para hablar con libnotify de nuestra biblioteca C. $ sudo eopkg it libnotify libnotify-devel$ notify-send " Summary " " Body of Notification "vlc , que se utilizará para reproducir un sonido de notificación, podría ser útil para alertar al usuario. $ sudo eopkg it vlc vlc-develPrimero vamos a una ubicación conveniente en la jerarquía de directorio de su máquina, donde puede clonar este repositorio y comenzar a funcionar.
$ git clone https://github.com/itzmeanjan/pynotif.git Ingrese al directorio pynotif y verifique el contenido de los directorios.
$ cd pynotif
$ tree -h
.
├── [4.0K] libnotification
│ ├── [2.4K] play_sound.c
│ ├── [ 45] play_sound.h
│ ├── [2.4K] send_notification.c
│ └── [ 235] send_notification.h
├── [1.0K] LICENSE
├── [4.0K] pynotif
│ ├── [1.5K] pynotif.pyx
│ └── [1.1K] setup.py
├── [7.0K] README.md
├── [4.0K] sound
│ ├── [ 30K] button_sound.wav
│ └── [ 29K] when.mp3
└── [4.0K] ss
└── [ 71K] screenshot.png
4 directories, 11 files Primero vamos a libnotification , que se compilará en una biblioteca C estática. Los nombres de los archivos se explican bastante por sí mismos, para el propósito que sirven.
$ cd libnotification
$ ls
play_sound.c play_sound.h send_notification.c send_notification.hTiempo para compilar cada uno de estos archivos C y generar código de objeto.
$ gcc -c play_sound.c
$ gcc -I /usr/include/glib-2.0/ -I /usr/include/gdk-pixbuf-2.0/ -I /usr/lib64/glib-2.0/include/ -c send_notification.c Ahora necesitamos archivar estos archivos de objetos en una biblioteca estática, que se invocará desde el código Cython (*.pyx archivo) .
$ ar rcs libnotification.a play_sound.o send_notification.oComo hemos obtenido la biblioteca estática, los códigos de objetos compilados se pueden eliminar ahora. Puede considerar verificar el tipo de biblioteca estática generada.
$ rm * .o
$ file libnotification.a
libnotification.a: current ar archive Ahora entraremos en el directorio pynotif , que contiene el código Cython, requerido para hablar con C-bibrary, libnotification.a .
$ cd ../pynotif
$ ls
pynotif.pyx setup.py pynotif.pyx contiene el código Cython para la interfaz con libnotification.a . Luego construiremos la biblioteca de extensión C (biblioteca vinculada dinámicamente) , que se puede invocar desde Python.
$ python3 setup.py build_ext --inplace
Compiling pynotif.pyx because it changed.
[1/1] Cythonizing pynotif.pyx
running build_ext
building ' pynotif ' extension
creating build
creating build/temp.linux-x86_64-3.7
x86_64-solus-linux-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -mtune=generic -march=x86-64 -g2 -pipe -fPIC -Wformat -Wformat-security -D_FORTIFY_SOURCE=2 -fstack-protector-strong --param ssp-buffer-size=32 -fasynchronous-unwind-tables -ftree-vectorize -feliminate-unused-debug-types -Wall -Wno-error -Wp,-D_REENTRANT -fno-semantic-interposition -O3 -falign-functions=32 -I/usr/include -mtune=generic -march=x86-64 -g2 -pipe -fPIC -Wformat -Wformat-security -D_FORTIFY_SOURCE=2 -fstack-protector-strong --param ssp-buffer-size=32 -fasynchronous-unwind-tables -ftree-vectorize -feliminate-unused-debug-types -Wall -Wno-error -Wp,-D_REENTRANT -fno-semantic-interposition -O3 -falign-functions=32 -fPIC -I/usr/include/glib-2.0/ -I/usr/include/gdk-pixbuf-2.0/ -I/usr/lib64/glib-2.0/include/ -I../libnotification/ -I/usr/include/python3.7m -c pynotif.c -o build/temp.linux-x86_64-3.7/pynotif.o
x86_64-solus-linux-gcc -pthread -shared -Wl,--copy-dt-needed-entries -Wl,-O1 -Wl,-z,relro -Wl,-z,now -Wl,-z,max-page-size=0x1000 -Wl,-Bsymbolic-functions -Wl,--sort-common -Wl,--copy-dt-needed-entries -Wl,-O1 -Wl,-z,relro -Wl,-z,now -Wl,-z,max-page-size=0x1000 -Wl,-Bsymbolic-functions -Wl,--sort-common build/temp.linux-x86_64-3.7/pynotif.o -L/usr/lib64/ -L../libnotification/ -L/usr/lib64 -lvlc -lnotify -lnotification -lpython3.7m -o /home/anjan/Documents/my_programs/still_working/open/pynotif/pynotif/pynotif.cpython-37m-x86_64-linux-gnu.so
$ tree -h
.
├── [4.0K] build
│ └── [4.0K] temp.linux-x86_64-3.7
│ └── [203K] pynotif.o
├── [125K] pynotif.c
├── [146K] pynotif.cpython-37m-x86_64-linux-gnu.so
├── [1.5K] pynotif.pyx
└── [1.1K] setup.py
2 directories, 5 files pynotif.*.so es nuestro objeto compartido estáticamente vinculado, que es de interés. ./build Directory y pynotif.c se pueden eliminar. Pero es posible que esté interesado en echar un vistazo a pynotif.c , que se genera código C de pynotif.pyx por Cython Compiler.
$ rm build/ pynotif.c -rv
$ file pynotif.cpython- * .so # check it out Ahora puede usar pynotif , pero solo de este directorio de trabajo. Vamos a verlo primero.
$ python3
>>> import pynotif
>>> pynotif.__version__
' 0.1.0 '
>>> pynotif.startNotif(b " My Application " )
1
>>> pynotif.sendNotif(b " Summary " , b " Body of Notification " , 2, 1, b " /path/to/icon/file " , b " /path/to/notification/sound/file " )
1
>> pynotif.stopNotif ()
>>> help ()
help > pynotif # shows you API documentation
...Pero queremos ponerlo a disposición de todos los scripts instalados en esta máquina, ¿no? Luego instalaremos esta biblioteca en una ubicación estándar.
$ python3 setup.py install --user Ahora vaya a $HOME Directory e Invoke Python3 REPN.
$ cd
$ python3
>> import pynotif # and it works as expected Felicitaciones, ha construido e instalado con éxito pynotif de C-Bibrary. Ahora use como desee.
Agradeciéndote