作者 主題: 為背景執行或 cron 自動執行的程式加提示訊息  (閱讀 8576 次)

0 會員 與 1 訪客 正在閱讀本文。

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
其實是為了好玩,花了點時間弄出來的
目的是讓一些背景執行或在 cron 自動執行的程式加提示訊息
訊息會顯示在桌面右上角,提示的部分是用 python + gtk

使用方式:
代碼: [選擇]
$ python ~/bin/pyNotify.py 'title' 'text' icon
title 是提示的標題,會以大字粗體顯示
text 是提示內容
icon 是提示左邊顯示的圖示

pyNotify.py
代碼: [選擇]
#!/usr/bin/python
# -*- coding: utf-8 -*-
import gtk.gdk
import pynotify
import sys

path0 = "file:///usr/share/icons/gnome/32x32/"
path1 = path0 + "mimetypes/"
path2 = path0 + "devices/"
path3 = path0 + "status/"
icons = {
  'book': path1 + "x-office-address-book.png",
  'certificate': path1 + "application-certificate.png",
  'clock': path3 + "appointment-soon.png",
  'exec': path1 + "exec.png",
  'error': path3 + "dialog-error.png",
  'harddisk': path2 + "drive-harddisk.png",
  'info': path3 + "dialog-information.png",
  'cdrom': path2 + "drive-optical.png",
  'package': path1 + "package-x-generic.png",
  'video': path1 + "video-x-generic.png",
  'warning': path3 + "dialog-warning.png",
  'zipdisk': path2 + "media-zip.png",
}

title = sys.argv[1];
text = sys.argv[2];
icon = sys.argv[3];
icon = (icons[icon]) if (icons.has_key(icon)) else icon

n = pynotify.Notification(title, text, icon)
n.show()

icons 預先定義一些可能較常用到的圖示
圖示所在路徑是我的 ubuntu 裡的位置
icon 可以直接使用 icons 裡定義的, 例如

代碼: [選擇]
$ python ~/bin/pyNotify.py '提示訊息' '目的是讓一些背景執行或在 cron 自動執行的程式加提示訊息' info
提示訊息裡就會顯示 dialog-information.png 這個圖示
也可以給完整的圖檔路徑, 例如

代碼: [選擇]
$ python ~/bin/pyNotify.py '提示訊息' '目的是讓一些背景執行或在 cron 自動執行的程式加提示訊息' file:///usr/share/icons/gnome/32x32/devices/drive-optical.png

pyNotify.py 也可以用在 cron 裡的 script, 例如

代碼: [選擇]
0-59/22 *    * * *   root /usr/local/bin/checkTime.sh >/dev/null 2>&1
這是我用來網路校時用的, 因為要能夠使用 x-window
這行要改成..

代碼: [選擇]
0-59/22 *    * * *   root env DISPLAY=:0 /usr/local/bin/checkTime.sh >/dev/null 2>&1
然後在 checkTime.sh 加上 pyNotify.py

代碼: [選擇]
#!/bin/sh
python /home/myname/bin/pyNotify.py '網路校時開始' '' clock
ntpdate time.stdtime.gov.tw
hwclock -w

以後每次網路校時, 在右上角就會出現一個提示訊息 ^_^


hikohan

  • 俺是博士!
  • *****
  • 文章數: 1288
    • 檢視個人資料
很棒的作法,跟notify-osd相同。

notify-send則多出顯示持續時間。

Yamaka親手作的精神尤其值得小弟效法!!
lifeIsFunWithPHP.

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
顯示時間本來有想要加的
但是一直試不出來

n.set_timeout(ms)

後來有查到原來是有 bug
所以 set_timeout() 無效  :D

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
上面所舉的使用方式, 如果想在提示內顯示執行結果, 那可以修改成這樣..

代碼: [選擇]
RES=`ntpdate time.stdtime.gov.tw`
hwclock -w
python /home/yamaka/bin/pyNotify.py '網路校時..' "$RES" clock

另外像我還有個 script 是用 ping 偵測某台主機是活著

代碼: [選擇]
RES=`ping -c 1 192.168.xx.xx|grep '64 bytes'`
這樣就可以自動提示 ping 的結果  :D