Bagaimana cara mengirim pesan teks ke gelembung notifikasi?

38

Saya menulis kode python untuk memasukkan teks acak ke file .txt. Sekarang saya ingin mengirim teks acak ini ke area notifikasi melalui perintah 'notify-send'. Bagaimana kita melakukannya?

Anuroop Kuppam
sumber

Jawaban:

63

Kami selalu dapat memanggil notify-send sebagai proses, misalnya seperti itu:

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

import subprocess

def sendmessage(message):
    subprocess.Popen(['notify-send', message])
    return

Atau kita juga bisa menginstal python-notify dan memanggil notifikasi melalui itu:

import pynotify

def sendmessage(title, message):
    pynotify.init("Test")
    notice = pynotify.Notification(title, message)
    notice.show()
    return

Perhatikan bahwa tidak ada paket python3-notify yang tersedia di Ubuntu. Jika Anda menggunakan Python 3, Anda harus menggunakan python3-notify2 . API untuk notify2 sama: ganti saja pynotifydengan notify2.

Takkat
sumber
1
Saya harus menggunakan subprocess.Popen(['notify-send', message])untuk membuat contoh pertama berfungsi.
lgarzo
Yang kedua a pynotify.init("Test")dan pynotify.Notification(title, message).show(). Ngomong-ngomong aku 'Belajar Python The Hard Way', jadi aku mungkin mengabaikan sesuatu ...
lgarzo
Maaf untuk itu. Saya tidak dapat menguji ini sebelumnya pada kotak saya di tempat kerja - buruk saya.
Mengedit
10

python3

Sementara Anda dapat menelepon notify-sendmelalui os.systematau subprocessini bisa dibilang lebih konsisten dengan pemrograman berbasis GTK3 untuk menggunakan intro- notifikasi gobject .

Contoh kecil akan menunjukkan ini dalam tindakan:

from gi.repository import GObject
from gi.repository import Notify

class MyClass(GObject.Object):
    def __init__(self):

        super(MyClass, self).__init__()
        # lets initialise with the application name
        Notify.init("myapp_name")

    def send_notification(self, title, text, file_path_to_icon=""):

        n = Notify.Notification.new(title, text, file_path_to_icon)
        n.show()

my = MyClass()
my.send_notification("this is a title", "this is some text")
kebebasan fosil
sumber
Tidak hanya lebih konsisten dengan pemrograman Gtk, tetapi juga merupakan proses tunggal: tidak ada fork-exec yang terjadi, jadi tidak ada pemborosan sumber daya untuk memunculkan proses baru hanya untuk mengirim gelembung pemberitahuan, plus Popen()akan memanggil shell untuk menjalankan perintah, jadi ada proses shell juga bermunculan.
Sergiy Kolodyazhnyy
6
import os
mstr='Hello'
os.system('notify-send '+mstr)
Syed 'cerah' I. Tauhidi
sumber
Bagaimana cara menyesuaikan notifikasi ini? Suka tajuk, gambar dalam notifikasi, dll.?
mehulmpt
1
Versi ini rentan terhadap eksekusi perintah sewenang-wenang.
Steve
5

Untuk menjawab pertanyaan Mehul Mohan juga mengusulkan cara terpendek untuk mendorong pemberitahuan dengan bagian judul dan pesan:

import os
os.system('notify-send "TITLE" "MESSAGE"')

Menempatkan ini dalam fungsi mungkin agak membingungkan karena tanda kutip dalam tanda kutip

import os
def message(title, message):
  os.system('notify-send "'+title+'" "'+message+'"')
Ringvee Perak
sumber
4
Anda dapat menyarankan hasil edit ke posting itu.
muru
2
Bagaimana dengan menggunakan 'notify-send "{}" "{}"'.format(title, message)daripada menambahkan string?
Stam Kaly
5

Bagi siapa pun yang melihatnya di +2018, saya dapat merekomendasikan paket notify2 .

Ini adalah pengganti python murni untuk notify-python, menggunakan python-dbus untuk berkomunikasi dengan server notifikasi secara langsung. Ini kompatibel dengan Python 2 dan 3, dan panggilan baliknya dapat bekerja dengan aplikasi Gtk 3 atau Qt 4.

Barbar Agung
sumber
4

Anda harus menggunakan paket notify2 , ini adalah pengganti untuk python-notify. Gunakan itu sebagai diikuti.

pip install notify2

Dan kodenya:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
jcofta
sumber