Файл не читает текстовый файл после запуска Popen - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь написать что-то, что проверяет определенный сервис, помещает это в текстовый файл. Послесловие Я пытаюсь определить, остановился ли он или работает, и делать другие вещи.

Файл создается и выглядит следующим образом, я попытался разобрать его по отдельности или с помощью .readlines(), но без кубиков. Любая помощь / советы будут оценены.

SERVICE_NAME: fax 
        TYPE               : 10  WIN32_OWN_PROCESS  
        STATE              : 1  STOPPED 
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

но мой код ниже возвращает пустой или ничего

from subprocess import Popen
import datetime

today = datetime.datetime.now()
squery = ['sc', 'query', 'fax']
proc = Popen(['sc', 'query', 'fax'], stdout=open(str(today.date())+'_ServiceCheck.txt', 'w'))
if 'STOPPED' in open(str(today.date())+'_ServiceCheck.txt').read():
    print("Uh Oh")
    #Do Something about it

1 Ответ

1 голос
/ 22 мая 2019

Как написано, есть большая вероятность, что родительский процесс откроет файл, проверит наличие 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 непосредственно на родительский процесс, это сделает его намного более надежным. При необходимости родительский процесс может также записывать журнал на диск от имени сценария.

В любом случае, многое зависит от деталей вашей среды и того, чего вы пытаетесь достичь.

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