Python Linux - Is-Alive Midori Watchdog

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

Я адаптировал это из кода здесь: https://raspberrypi.stackexchange.com/questions/6981/auto-refresh-for-midori.

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

Я отключил вызовы midori и только что вывел up и last vars, и они правильные и условия if выполняются правильно, поэтому похоже, что это связано с popen и sub.calls.

Любые идеи о том, что проблема может быть??

#!/usr/bin/env python
host = "localhost"
port = 888
recheck_time = 10
page_to_open_to = "/"
lurl = "///usr/share/scripts/splash.htm"
last = -1 #undefined state
up = -1 #Undefined state

import subprocess as sub
from time import sleep
import socket
import threading

sub.Popen(["midori", "-a","localhost:888","-e","Fullscreen"]) #open midori

#Check if internet is up
addr = (host, port) #the connection addr

while True:
    last = up #reset checking var
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #create socket
    try: #attempt to ping, change vars
        s.connect(addr)
        up = 1

    except socket.error:
        up = 0 

    if up == 1 and last == 0:
        sub.call(["midori", "-a", "localhost:888","-e","Fullscreen"])
        print('up')

    elif up == 0 and last == 1:
        sub.call(["midori", "-a",lurl,"-e","Fullscreen"])
        print("down")

    s.close()

    print(up,",",last)
    sleep(recheck_time)

похоже, что каждый раз, когда sub.call() создается новый процесс, пока есть 2 процесса, а затем ничего:

root      3499  0.3  0.5  10792  5856 tty1     S    17:44   0:00 /usr/bin/python /usr/share/scripts/midori.py
root      3500  3.3  4.7 191620 48240 tty1     Sl   17:44   0:03 midori -a localhost:888 -e Fullscreen
root      3530  1.0  2.8 173732 28836 tty1     Sl   17:45   0:00 midori -a ///usr/share/scripts/splash.htm

1 ответ

Вызов подпроцесса ожидает завершения команды.

Такое ощущение, что звонки мидори не возвращаются. Что будет делать мидори, когда ее призовут? Будет ли он автоматически закрываться через некоторое время и, таким образом, вернуть поток к коду Python?

Попробуйте выполнить:

sub.call(["midori", "-a", "localhost:888","-e","Fullscreen"])

в интерпретаторе Python и проверьте, возвращается ли он.

Если он не возвращается, вы должны попробовать Popen из модуля подпроцесса. Упакуйте материал midori в конструкцию Popen, (возможно) дождитесь некоторого конкретного вывода и конца midori (или оставьте его в силе, если вы можете передать новые URL работающему midori).

Другие вопросы по тегам