ฉันจะส่งข้อความไปที่ฟองอากาศการแจ้งเตือนได้อย่างไร


38

ฉันเขียนโค้ดไพ ธ อนเพื่อรับข้อความแบบสุ่มลงในไฟล์. txt ตอนนี้ฉันต้องการส่งข้อความแบบสุ่มนี้ไปยังพื้นที่แจ้งเตือนผ่านคำสั่ง 'แจ้งเตือน - ส่ง' เราจะทำอย่างนั้นได้อย่างไร?

คำตอบ:


63

เราสามารถโทรแจ้ง - ส่งเป็น subprocess ได้เช่น:

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

import subprocess

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

นอกจากนี้เรายังสามารถติดตั้งpython-alertและโทรแจ้งเตือนผ่านทาง:

import pynotify

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

โปรดทราบว่าไม่มีแพ็คเกจแจ้งเตือน python3 ใน Ubuntu หากคุณกำลังใช้งูหลาม 3 คุณจะต้องใช้python3-notify2 API จะ notify2 เป็นเช่นเดียว: เพียงแทนที่ด้วยpynotifynotify2


1
ฉันต้องใช้subprocess.Popen(['notify-send', message])เพื่อทำให้ตัวอย่างแรกทำงานได้
lgarzo

ที่สองหนึ่งและpynotify.init("Test") pynotify.Notification(title, message).show()โดยวิธีการที่ฉัน“การเรียนรู้หลามวิธี Hard” ดังนั้นผมอาจจะมองข้ามบางสิ่งบางอย่างเพียงแค่ ...
lgarzo

ขอโทษสำหรับสิ่งนั้น ฉันไม่สามารถทดสอบสิ่งนี้ก่อนหน้านี้ในกล่องที่ทำงาน - ของฉันไม่ดี แก้ไขบิตที่หายไปใน
Takkat

10

python3

ขณะที่คุณสามารถโทรnotify-sendผ่านos.systemหรือsubprocessมันคือเนื้อหาที่สอดคล้องกันมากขึ้นกับการเขียนโปรแกรม GTK3 ตามการใช้แจ้งGObject-วิปัสสนาชั้น

ตัวอย่างเล็ก ๆ จะแสดงสิ่งนี้ในการทำงาน:

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")

ไม่เพียง แต่สอดคล้องกับการเขียนโปรแกรม Gtk เท่านั้น แต่ยังเป็นกระบวนการเดียว: ไม่มี fork-exec เกิดขึ้นดังนั้นจึงไม่ต้องเสียทรัพยากรในการวางกระบวนการใหม่เพียงส่งฟองการแจ้งเตือนและPopen()จะเรียก shell เพื่อเรียกใช้คำสั่งดังนั้นจึงมี กระบวนการเปลือกก็โผล่ขึ้นมาเช่นกัน
Sergiy Kolodyazhnyy

6
import os
mstr='Hello'
os.system('notify-send '+mstr)

ฉันจะปรับแต่งการแจ้งเตือนนี้ได้อย่างไร ชอบหัวเรื่องภาพในการแจ้งเตือน ฯลฯ ไหม
mehulmpt

1
รุ่นนี้มีความเสี่ยงต่อการดำเนินการคำสั่งโดยพลการ
Steve

5

หากต้องการตอบคำถามของ Mehul Mohan รวมทั้งเสนอวิธีที่สั้นที่สุดในการผลักดันการแจ้งเตือนด้วยชื่อเรื่องและส่วนของข้อความ:

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

การวางฟังก์ชันนี้ไว้ในนั้นอาจทำให้เกิดความสับสนเล็กน้อยเนื่องจากคำพูดในเครื่องหมายคำพูด

import os
def message(title, message):
  os.system('notify-send "'+title+'" "'+message+'"')

4
คุณสามารถแนะนำการแก้ไขโพสต์นั้น
muru

2
สิ่งที่เกี่ยวกับการใช้'notify-send "{}" "{}"'.format(title, message)แทนที่จะเพิ่มสตริง?
Stam Kaly

4

สำหรับใครที่ดูนี่ใน +2018 ฉันสามารถแนะนำแพคเกจinform2

นี่คือการแทนที่ pure-python สำหรับ alert-python โดยใช้ python-dbus เพื่อสื่อสารกับเซิร์ฟเวอร์การแจ้งเตือนโดยตรง มันเข้ากันได้กับ Python 2 และ 3 และการโทรกลับสามารถทำงานกับแอปพลิเคชัน Gtk 3 หรือ Qt 4


3

คุณควรใช้แพ็คเกจ NOTE2 มันเป็นสิ่งทดแทนสำหรับ python-alert ใช้มันดังต่อไปนี้

pip install notify2

และรหัส:

import notify2
notify2.init('app name')
n = notify2.Notification('title', 'message')
n.show()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.