반응형

FastAPI, 현재 실행 프로세스 및 환경 정보 예제

 

글. 수알치 오상문

 

아래는 현재 실행 프로세스 및 환경 정보를 확인하는 FastAPI 예제입니다. 

import time
import datetime
import os
from fastapi import FastAPI

app = FastAPI()

@router.get("/process-info, status_code = 200)
async def process_info():
    """현재 실행중인 프로세스 및 환경 정보 반환

    Returns:
        [json]: 결과
    """
    pid = os.getpid()  # 현재 프로세스ID

    # OS에 맞게 PID의 기타 정보 수집
    if platform.system() == "Windows":
        command = ["tasklist", "/FI", f"PID eq {pid}"]
        encoding = "cp949"  # 윈도우 기본 인코딩 설정
    else:
        command = ["ps", "-p", str(pid), "-o", "comm="]
        encoding = "utf-8"  # 그외(리눅스) 기본 인코딩 설정

    process = subprocess.Popen(command, stdout=subprocess.PIPE)
    stdout, stderr = process.communicate()
    process_name = stdout.decode(encoding).strip().splitlines()[-1]

    if platform.system() == "Windows":
        process_name = process_name.split(None, 2)[0]

    program_name = "기타"
    if len(sys.argv):
        program_path = sys.argv[0].lower()
        if 'uvicorn' in program_path:
            program_name = "uvicorn"
            print(">>> uvicorn")
        elif 'gunicorn' in program_path:
            program_name = "gunicorn"
            print(">>> gunicorn")
        else:
            program_name = program_path.split("\\")[-1]

    return {
        "message": f"Current Process-ID: {pid}",
        "program_name": program_name,  # 'uvicorn, gunicorn, ...
        "process_name": process_name,  # 'python.exe'
        "sys_args": sys.argv,  # 프로세스 실행 인자 환경 정보
    }

 

반응형

+ Recent posts