mirror of
https://github.com/altlinux/gpupdate.git
synced 2025-03-07 00:58:42 +03:00
Add functions to find and wait for a Python process by script path
This commit is contained in:
parent
8c7819d96f
commit
a20aa841d6
@ -21,6 +21,8 @@ import subprocess
|
|||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import psutil
|
||||||
|
import time
|
||||||
|
|
||||||
class Scripts_runner:
|
class Scripts_runner:
|
||||||
'''
|
'''
|
||||||
@ -109,7 +111,34 @@ class Scripts_runner:
|
|||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
return exc
|
return exc
|
||||||
|
|
||||||
|
def find_process_by_name_and_script(name, script_path):
|
||||||
|
|
||||||
|
for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
|
||||||
|
try:
|
||||||
|
# Check if the process name matches and the script path is in the command line arguments
|
||||||
|
if proc.info['name'] == name and script_path in proc.info['cmdline']:
|
||||||
|
return proc
|
||||||
|
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
||||||
|
continue
|
||||||
|
return None
|
||||||
|
|
||||||
|
def wait_for_process(name, script_path, check_interval=1):
|
||||||
|
|
||||||
|
process = find_process_by_name_and_script(name, script_path)
|
||||||
|
if not process:
|
||||||
|
print(f"Process with name {name} and script path {script_path} not found.")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Loop to wait for the process to finish
|
||||||
|
while process.is_running():
|
||||||
|
print(f"Waiting for process {name} with PID {process.pid} to finish...")
|
||||||
|
time.sleep(check_interval)
|
||||||
|
print(f"Process {name} with PID {process.pid} has finished.")
|
||||||
|
return
|
||||||
|
except (psutil.NoSuchProcess, psutil.AccessDenied):
|
||||||
|
print(f"Process {name} with PID {process.pid} is no longer accessible.")
|
||||||
|
return
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = argparse.ArgumentParser(description='Scripts runner')
|
parser = argparse.ArgumentParser(description='Scripts runner')
|
||||||
@ -117,6 +146,9 @@ if __name__ == '__main__':
|
|||||||
parser.add_argument('--user', type = str, help = 'User name ', nargs = '?', default = None)
|
parser.add_argument('--user', type = str, help = 'User name ', nargs = '?', default = None)
|
||||||
parser.add_argument('--action', type = str, help = 'MACHINE : [STARTUP or SHUTDOWN], USER : [LOGON or LOGOFF]', nargs = '?', default = None)
|
parser.add_argument('--action', type = str, help = 'MACHINE : [STARTUP or SHUTDOWN], USER : [LOGON or LOGOFF]', nargs = '?', default = None)
|
||||||
|
|
||||||
|
process_name = "python3"
|
||||||
|
script_path = "/usr/sbin/gpoa"
|
||||||
|
wait_for_process(process_name, script_path)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
try:
|
try:
|
||||||
Scripts_runner(args.mode, args.user, args.action)
|
Scripts_runner(args.mode, args.user, args.action)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user