initial commit
This commit is contained in:
72
start.py
Normal file
72
start.py
Normal file
@@ -0,0 +1,72 @@
|
||||
|
||||
import subprocess
|
||||
import time
|
||||
import os
|
||||
import psutil
|
||||
from loguru import logger
|
||||
|
||||
# 定义要启动的程序和命令
|
||||
binary_command = "cd /home/evan/Workplace/project_capture/build/; ./capture" # 替换为你的二进制程序路径
|
||||
conda_envs = [
|
||||
{"env": "conda_venv", "path": "/home/evan/Workplace/project_infer/lane_server/", "script": "python lane_infer_server.py"},
|
||||
{"env": "conda_venv", "path": "/home/evan/Workplace/project_infer/yolo_server/", "script": "python yolo_infer_server.py"},
|
||||
]
|
||||
|
||||
def kill_processes_by_name(process_name):
|
||||
"""
|
||||
终止所有具有指定名称的进程。
|
||||
"""
|
||||
for proc in psutil.process_iter(['pid', 'name', 'cmdline']):
|
||||
try:
|
||||
# 检查进程名是否包含给定的字符串
|
||||
if process_name.lower() in proc.info['name'].lower() or process_name.lower() in ' '.join(proc.info['cmdline']).lower():
|
||||
logger.warning(f"Killing {proc.info['name']} (PID: {proc.info['pid']})")
|
||||
proc.kill()
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
||||
pass
|
||||
|
||||
# 启动函数,用于启动并监控一个进程
|
||||
def start_and_monitor_process(cmd, env=None):
|
||||
process = subprocess.Popen(cmd, shell=True, env=env)
|
||||
# while process.poll() is None: # 等待进程结束
|
||||
# time.sleep(1) # 可以根据需要调整等待时间
|
||||
# return process.returncode # 返回进程退出码
|
||||
|
||||
# 主程序
|
||||
def main():
|
||||
# 启动二进制程序
|
||||
|
||||
logger.error("hi")
|
||||
|
||||
kill_processes_by_name("capture")
|
||||
binary_returncode = start_and_monitor_process(binary_command)
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
logger.info("start python script")
|
||||
# 为每个 conda 环境启动 Python 脚本
|
||||
conda_procs = []
|
||||
for env_info in conda_envs:
|
||||
logger.info(f"start {env_info['script']}")
|
||||
# 激活 conda 环境并运行脚本(这里假设你使用的是 bash shell)
|
||||
activate_cmd = f"cd {env_info['path']}; {env_info['script']}"
|
||||
# activate_cmd = f"conda activate {env_info['env']}; {env_info['script']}"
|
||||
# 注意:在某些系统上,可能需要使用 `conda activate` 而不是 `source activate`
|
||||
# 并且可能需要设置 CONDA_PREFIX 等环境变量
|
||||
env = os.environ.copy()
|
||||
# 如果有需要传递给子 shell 的环境变量,可以在这里设置
|
||||
# 例如:env["CONDA_PREFIX"] = ...
|
||||
conda_proc = subprocess.Popen(["bash", "-c", activate_cmd], env=env)
|
||||
conda_procs.append(conda_proc)
|
||||
|
||||
# 等待所有 conda 环境中的 Python 脚本完成
|
||||
for proc in conda_procs:
|
||||
proc.wait() # 等待进程结束,但不会轮询检查
|
||||
|
||||
# 打印提示信息
|
||||
print(f"Binary program exited with code {binary_returncode}")
|
||||
for idx, proc in enumerate(conda_procs):
|
||||
print(f"{env_info['script']} script exited with code {proc.returncode}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user