通知バブルにテキストメッセージを送信するにはどうすればよいですか?


38

ランダムテキストを.txtファイルに取り込むためのPythonコードを書きました。ここで、このランダムテキストを「notify-send」コマンドを使用して通知領域に送信します。どうすればいいですか?

回答:


63

次のように、常にnotify-sendをサブプロセスとして呼び出すことができます。

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

import subprocess

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

または、python-notifyをインストールし、それを介して通知を呼び出すこともできます。

import pynotify

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

Ubuntuには利用可能なpython3-notifyパッケージがないことに注意してください。Python 3を使用している場合は、python3-notify2を使用する必要があります。notify2のAPIも同じです。単にに置き換えpynotifyてくださいnotify2


1
subprocess.Popen(['notify-send', message])最初の例を動作させるために使用する必要がありました。
lgarzo

二番目のA pynotify.init("Test")pynotify.Notification(title, message).show()。ちなみに、私は「Pythonを学ぶハードウェイ」なので、何かを見落とすかもしれません
...-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()シェルを呼び出してコマンドを実行するため、シェルプロセスもポップアップします。
セルギーKolodyazhnyy

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

この通知をカスタマイズするにはどうすればよいですか?見出し、通知の画像などが好きですか?
mehulmpt

1
このバージョンは、任意のコマンド実行に対して脆弱です。
スティーブ

5

Mehul Mohanの質問に答え、タイトルとメッセージセクションを含む通知をプッシュする最短の方法を提案するには:

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

これを関数に入れると、引用符で囲まれたために少し混乱するかもしれません

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


2
'notify-send "{}" "{}"'.format(title, message)文字列を追加するのではなく、使用するのはどうですか?
スタムカリー

4

+2018でこれを見ている人には、notify2パッケージをお勧めします。

これは、通知サーバーと直接通信するためにpython-dbusを使用する、notify-pythonの純粋なPythonの置き換えです。Python 2および3と互換性があり、そのコールバックはGtk 3またはQt 4アプリケーションで動作します。


3

notify2パッケージを使用する必要があります。これはpython-notifyの代替です。次のように使用します。

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.