시작할 때마다 Python 스크립트를 실행하는 방법은 무엇입니까?

시작할 때마다 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스크립트를 호출하는 서비스를 만들었습니다. 그러나 스크립트는 데스크톱 알림을 표시하기 위한 것이므로 guid와 uid를 변경했지만 루트로 실행 중이므로 작동하지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

KDE 플라즈마 버전 5.5.5

답변1

.xinitrc파일 이 없으면 홈 디렉터리에 파일을 만듭니다 . 그런 다음 다음을 추가하세요.

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

이렇게 하면 X 서버가 시작될 때(데스크톱 환경이 시작될 때) 스크립트가 시작됩니다.

관련 정보