ChatGPTと相談しながら、fastapiの起動時にコマンドを起動する方法を試していたのですが、上手く動かない(最初のコマンドでロックしてしまう)ので、起動したまま、そのまま放置するコード(プロセスを落したければ、コマンドから自力でkillコマンドで落す必要ある)にしました。
import subprocess
from fastapi import FastAPI
app = FastAPI()
# 各コマンドを実行する関数
def run_command(command):
try:
# バックグラウンドでプロセスを実行
subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
except Exception as e:
print(f"コマンド '{command}' の実行中にエラーが発生しました: {str(e)}")
# 各コマンドを実行
commands = [
"sudo socat udp-listen:38089,reuseaddr,fork udp:192.168.3.153:38089",
"sudo socat udp-listen:38090,reuseaddr,fork udp:192.168.3.153:38090",
"sudo socat udp-listen:38091,reuseaddr,fork udp:192.168.3.153:38091"
]
for command in commands:
run_command(command)
@app.on_event("startup")
async def startup_event():
print("Application startup complete.")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)