Как запускать скрипт Python при каждой загрузке?

У меня есть следующий сценарий:

#! /usr/bin/python

import glib
import re
import subprocess
import requests
import bs4
import datetime
import sys
import os
import time
from selenium import webdriver
from pyudev import Context, Monitor
from selenium.common.exceptions import NoSuchElementException

def demote():
    def result():
        os.setgid(100)
        os.setuid(1000)
    return result

def inotify(title, message):
    subprocess.call(['notify-send', '{}\n'.format(title), '{0}\n'.format(message)], preexec_fn=demote())
    #os.system('notify-send ' + title + ' ' + message)

def get_network_data(tout):
    """Scrapes balance data from ISP website."""

    if tout is not None:
        try:
        # Do some scraping
            if data_found:
                full_msg = '{0}\n{1}'.format(my_balance.capitalize(), airtime_balance.capitalize())
                inotify('My Balance', full_msg)
                #subprocess.call(['notify-send', 'My Balance', '\n{0}\n{1}'.format(my_balance.capitalize(), airtime_balance.capitalize())], preexec_fn=demote())

            else:
                print('Could not retrieve data from page...')
                full_msg = '{0}'.format('Error: Could not retrieve data from page.')
                inotify('My Balance', full_msg)
                #subprocess.call(['notify-send', 'My Balance', '\n{0}'.format('Error: Could not retrieve data from page.')], preexec_fn=demote())

        except NoSuchElementException:
            print('Could not locate element...')
            full_msg = '{0}'.format('Error: Could not locate element - acc.')
            inotify('My Balance', full_msg)
            #subprocess.call(['notify-send', 'iMonitor:get_network_data', '\n{0}'.format('Error: Could not locate element - acc.')], preexec_fn=demote())

    else:
        print('Could not find USB device...')
        full_msg = '\n{0}'.format('Error: Could not find USB device.')
        inotify('My Balance', full_msg)
        #subprocess.call(['notify-send', 'iMonitor', '\n{0}'.format('Error: Could not find USB device.')], preexec_fn=demote())

def identify_phone(observer, device):
    """Identifies if specific USB device (phone) is connected (tethered)."""

    global last_updated, initial_search, msg_count

    current_time = datetime.datetime.now()
    time_diff = current_time - last_updated

    if (time_diff.seconds > 300) or initial_search:
        try:
            time.sleep(0.25)
            tout = subprocess.check_output("lsusb | grep 1234:5678", shell=True)
        except subprocess.CalledProcessError:
            tout = None

        last_updated = datetime.datetime.now()
        initial_search = False

        get_network_data(tout)

    if time_diff.seconds > 10:
        msg_count = 1

    if not initial_search and msg_count == 1:
        wait_time = datetime.datetime.fromtimestamp(600 - time_diff.seconds)
        message = wait_time.strftime('You may have to wait %-M minute(s), %-S second(s) before another check is done.')
        print('Could not retrieve data from page...')
        full_msg = '\n{0}'.format(message)
        inotify('My Balance', full_msg)
        #subprocess.call(['notify-send', 'iMonitor:Identify Phone', '\n{0}'.format(message)], preexec_fn=demote())
        msg_count += 1

try:
    initial_search = True
    last_updated = datetime.datetime.now()
    msg_count = 1
    try:
        from pyudev.glib import MonitorObserver

    except ImportError:
        from pyudev.glib import GUDevMonitorObserver as MonitorObserver

    context = Context()
    monitor = Monitor.from_netlink(context)

    monitor.filter_by(subsystem='usb')
    observer = MonitorObserver(monitor)

    observer.connect('device-added', identify_phone)
    monitor.start()

    glib.MainLoop().run()

except KeyboardInterrupt:
    print('\nShutdown requested.\nExiting gracefully...')
    sys.exit(0)

Я бы хотел, чтобы он запускался при каждой загрузке, поэтому я создал службу в / etc / systemd / system , которая вызывает сценарий. Однако, поскольку сценарий предназначен для отображения уведомлений на рабочем столе, мне не удалось выполнить эту работу, поскольку он запускается от имени пользователя root; это несмотря на то, что я поменял guid и uid. Любая помощь будет оценена.

KDE Plasma, версия 5.5.5

0
19.03.2017, 18:33
1 ответ

Создайте файл .xinitrc в нашем домашнем каталоге (если он не существует). Затем добавьте это:

bash <absolute/path/to/your/script.py> &

Это заставит ваш скрипт запускаться при запуске вашего X-сервера (когда запускается среда вашего рабочего стола).

0
28.01.2020, 04:47

Теги

Похожие вопросы