Python - Flask로 간단한 API 만들기 2
① ② Python
Flask API 간단한 예제 2
(Flask API 간단한 예제 1 에 이어서)
python API를 구현할 수 있는 프레임워크로 Flask가 있다. 단순하고 가벼운 기능을 구현하기에 용이하다.
요약 : 클라이언트로부터 HTTP Get방식으로 요청이 왔을때 shell script를 실행(ubuntu, 리눅스 명령어)시키고 응답결과를 반환하는 예제
- 기능
- Run shell script
- Save log file(로그 저장)
python flask api 소스코드
from flask import Flask, json, jsonify, request
import subprocess
import sys
import logging
from datetime import datetime
app = Flask(__name__)
# API 접근 라우팅 /runshellExam
@app.route('/runshellExam', methods=['GET'])
def get_run():
print('Run Api')
# 시간 가져오기
timestamp = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
directory = "/usr/local/testShell"
result = subprocess.run(["./run"], capture_output=True, cwd=directory)
# 로그 이벤트의 출력 포맷을 설정
logging.basicConfig(filename=f'api_{timestamp}.log', level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s')
# 명령어 실행, 결과 가져오기
# subprocess.run : 현재 소스코드에서 다른 프로세스 실행, 입출력 제어
# stdout, stderr 각각 표준 출력, 표준 에러의 리다이렉션을 지정
# 파이프(pipe) : 데이터를 서브프로세스로 보낸 다음 서브프로세스의 결과
# shell=True : 제공 명령어 사용
cmd = 'ls -l'
log_result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
# 로그 정보
logging.info('Starting program')
logging.debug('This is a debug message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
# 기존 로그에 서버 응답결과를 추가 : open(파일 이름, 파일 열기 모드), a는 추가모드
with open(f'api_{timestamp}.log', 'a') as f:
f.write('===== [ Execution response result] =====\n')
f.write(log_result.stdout.decode('utf-8'))
f.write('===== [ Client response result ] =====\n')
f.write(result.stdout.decode('utf-8'))
#결과 반환
#shell script 응답결과 반환
print('run response :: ', result.stdout)
return result.stdout
#서버 호스트, 포트 설정
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000', debug=True)
댓글남기기