এই উত্তর এবং ইন্টারনেটের অতিরিক্ত গবেষণার উপর ভিত্তি করে পাইথন লঞ্চারটি এখানে রয়েছে যা উবুন্টু 16.04 এ দুর্দান্ত কাজ করে:
#!/usr/bin/env python3
import signal
import gi
import os
import subprocess
import sys
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
import time
from threading import Thread
# Execute the script
script = os.path.basename(sys.argv[1])
subprocess.Popen(sys.argv[1:])
script_name = script.rsplit('/', 1)[-1]
class Indicator():
def __init__(self):
self.app = 'Script indicator'
iconpath = "/usr/share/unity/icons/launcher_bfb.png"
self.indicator = AppIndicator3.Indicator.new(
self.app, iconpath,
AppIndicator3.IndicatorCategory.OTHER)
self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.indicator.set_menu(self.create_menu())
self.indicator.set_label("Script Indicator", self.app)
# the thread:
self.update = Thread(target=self.show_seconds)
# daemonize the thread to make the indicator stopable
self.update.setDaemon(True)
self.update.start()
def create_menu(self):
menu = Gtk.Menu()
# menu item 1
item_quit = Gtk.MenuItem('Quit')
item_quit.connect('activate', self.stop)
menu.append(item_quit)
menu.show_all()
return menu
def show_seconds(self):
global script_name
t = 0
process = subprocess.call(['pgrep', script_name], stdout=subprocess.PIPE)
while (process == 0):
t += 1
GObject.idle_add(
self.indicator.set_label,
script_name + ' ' + str(t) + 's', self.app,
priority=GObject.PRIORITY_DEFAULT
)
time.sleep(1)
process = subprocess.call(['pgrep', script_name], stdout=subprocess.PIPE)
subprocess.call(['notify-send', script_name + ' ended in ' + str(t) + 's'])
time.sleep(10)
Gtk.main_quit()
def stop(self, source):
global script_name
subprocess.call(['pkill', script_name], stdout=subprocess.PIPE)
Gtk.main_quit()
Indicator()
# this is where we call GObject.threads_init()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()
- আপনি যদি স্ক্রিপ্টটি উন্নত করার কোনও উপায় দেখতে পান তবে দয়া করে উত্তরটি সম্পাদনা করতে দ্বিধা করবেন না। পাইথনের সাথে আমার খুব বেশি অভিজ্ঞতা নেই।
এক্সিকিউটেবল ফাইল তৈরি করুন এবং উপরের লাইনগুলিকে এর সামগ্রী হিসাবে স্থাপন করুন place ধরে নেওয়া যাক ফাইলটি বলা হয়েছে script-indicator.py
। আপনার প্রয়োজন এবং আপনার স্ক্রিপ্টের প্রকৃতির উপর নির্ভর করে আপনি নিম্নলিখিতটিগুলির মধ্যে একটিতে এই লঞ্চারটি ব্যবহার করতে পারেন :
./script-indicator.py /path/to/script.sh
./script-indicator.py /path/to/script.sh &
./script-indicator.py /path/to/script.sh > out.log &
./script-indicator.py /path/to/script.sh > /dev/null &
- আপনি যেখানে
script.sh
ইঙ্গিত করতে চান তা কোথায় ।
স্ক্রিনশটটি script.sh
শেষ হওয়ার সাথে সাথে তৈরি:
- একটি অ্যানিমেটেড ডেমো দেখতে ছবিতে ক্লিক করুন।
বিকল্পভাবে আপনি স্ক্রিপ্টটি /usr/local/bin
শেল কমান্ড সিস্টেম প্রশস্ত হিসাবে অ্যাক্সেসযোগ্য হতে রাখতে পারেন। আপনি এই উত্সর্গীকৃত গিটহাব গিস্ট থেকে এটি ডাউনলোড করতে পারেন :
sudo wget -qO /usr/local/bin/script-indicator https://gist.githubusercontent.com/pa4080/4e498881035e2b5062278b8c52252dc1/raw/c828e1becc8fdf49bf9237c32b6524b016948fe8/script-indicator.py
sudo chmod +x /usr/local/bin/script-indicator
আমি এটি নিম্নলিখিত বাক্য গঠন দিয়ে পরীক্ষা করেছি:
script-indicator /path/to/script.sh
script-indicator /path/to/script.sh &
script-indicator /path/to/script.sh > output.log
script-indicator /path/to/script.sh > output.log &
script-indicator /path/to/script.sh > /dev/null
script-indicator /path/to/script.sh > /dev/null &
nohup script-indicator /path/to/script.sh >/dev/null 2>&1 &
# etc...