Как написано, есть большая вероятность, что родительский процесс откроет файл, проверит наличие STOP
и закроется задолго до того, как подпроцесс даже начнет работать. Вы можете использовать subprocess.call
, чтобы принудительно блокировать родительский процесс, пока дочерний процесс не завершит выполнение, что может привести к идее ожидания завершения процесса сценария Selenium.
Учтите это:
# some_script.py
from time import sleep
print("subprocess running!")
for i in range(5):
print("subprocess says %s" % i)
sleep(1)
print("subprocess stopping!")
# main.py
import subprocess
while True:
print("parent process starting child...")
proc = subprocess.call(["python", "some_script.py"])
print("parent process noticed child stopped running")
Выходная выдержка из бега python main.py
:
parent process starting child...
subprocess running!
subprocess says 0
subprocess says 1
subprocess says 2
subprocess says 3
subprocess says 4
subprocess stopping!
parent process noticed child stopped running
parent process starting child...
subprocess running!
subprocess says 0
subprocess says 1
subprocess says 2
subprocess says 3
subprocess says 4
subprocess stopping!
parent process noticed child stopped running
...
Это выглядит намного лучше. Родитель полностью блокируется, пока дочерний процесс не прекратит выполнение, а затем немедленно перезапустит дочерний.
В противном случае, чтобы делать то, что вы делаете, похоже, что вам нужно периодически опрашивать файл, например:
import datetime
from subprocess import Popen
from time import sleep
delay = 10
while True:
today = datetime.datetime.now()
fname = '%s_ServiceCheck.txt' % today.date()
file_content = open(fname).read()
if 'STOPPED' in file_content:
print('Uh oh')
proc = Popen(['sc', 'query', 'fax'], stdout=open(fname, 'w'))
sleep(delay)
Но будьте осторожны - что если процесс Selenium остановится в 11:59:59? Опрос этого текстового файла довольно хрупкий, поэтому этот сценарий, вероятно, далеко не достаточно надежен для обработки всех случаев. Если вы сможете перенаправить вывод вашего скрипта Selenium непосредственно на родительский процесс, это сделает его намного более надежным. При необходимости родительский процесс может также записывать журнал на диск от имени сценария.
В любом случае, многое зависит от деталей вашей среды и того, чего вы пытаетесь достичь.