Объект модуля не будет обновлен, пока код не будет перезапущен - PullRequest
0 голосов
/ 03 февраля 2020

Не совсем уверен, как спросить об этом, поэтому я пытаюсь распечатать тома подключенных дисков.

Вот упрощенная версия моего кода:

from gi.repository import Gio
from time import sleep
import importlib
import os



def check():
    importlib.reload(Gio)
    vm = Gio.VolumeMonitor.get()
    volumes = vm.get_volumes()
    print("Volumes: {}".format([i.get_name() for i in volumes]))
    sleep(2)


while True:
    check()

Таким образом, этот код распечатывает тома подключенных дисков. Однако до сих пор проблем не возникало, когда я подключал новое устройство или отключал текущее, список не будет обновляться. Изменения не обнаруживаются.

Я пытался;

  • повторный импорт модуля Gio

  • удаление импортированного модуля и повторное импортируя его

  • вызов функции из другого python файла

Я хотел бы в конце сделать сервис из этого кода. Я полагаю, что мог бы сделать эту работу с cron, однако я пытаюсь заставить его работать как сервис.

Мой сервисный файл:

[Unit]
Description=Usbmount service
StartLimitIntervalSec=0


[Service]
Type=simple
Restart=always
RestartSec=5
User=abc
ExecStart=/usr/bin/python3 /abc/myuser/usbmount.py
ExecStop=/usr/bin/python3 /abc/myuser/usbmount.py

[Install]
WantedBy=multi-user.target

Любые идеи о том, как решить это?

спасибо

1 Ответ

0 голосов
/ 08 февраля 2020

Добавление:

os.execv("path/to/file", sys.argv)

делает трюк, скрипт перезапускается с другим PID, поэтому обновленные результаты обнаруживаются и распечатываются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...