я делаю свой хостинг по майнкрафту, но консоль не передаёт строки от сервера

я делаю свой хостинг по майнкрафту, но консоль не передаёт строки от сервера. Но находясь в браузере на сайте моего хостинга пишет что браузер что-то передаёт серверу до тех пор пока сервер не выключится. я пробовал много способов, но не один ничего не передал консоли на сайте. я делаю на Flask и HTML с его интеграциями.

код python:

import os
import subprocess
import threading
import json
from js import window


from flask import Flask
from flask import render_template
from flask_sockets import Sockets
from flask import request
from flask import jsonify

app = Flask(__name__)
sockets = Sockets(app)

def read_server_output(p, window):
    while True:
        line = p.stdout.readline().decode().strip()
        if line:
            window.postMessage({'action': 'log', 'message': line}, '*');
   
@app.route('/')
def index():
    return render_template('base.html')

@app.route('/my-endpoint', methods=['POST'])
def my_endpoint():
    data = request.form.to_dict()
    if data['action'] == 'my-action':
        p = subprocess.Popen([
            'java', 
            '-Xmx1024M', 
            '-Xms1024M', 
            '-jar', 
            '~/server/minecraft_server.1.16.5.jar', 
            'nogui', 
            '&'
        ], stdout=subprocess.PIPE)

        thread = threading.Thread(target=read_server_output(), args=(p, window))
        thread.daemon = True
        thread.start()
        
    return jsonify({'success': True})

if __name__ == '__main__':
    app.run(debug=True)

код html: (css убран для читабельности.)

<!DOCTYPE html>
<html>
<head>
  <title>Панель управления LimeHost</title>
  <style>
    @import url('https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap');
  </style>
</head>
<body>
  <div id="top-bar">
    <!--<img src="logo.png" alt="">-->
    <h1>LimeHost</h1>
    <button id="exit-button" onclick="document.close(); return false;">Выйти</button>
  </div>
  <div id="main-content">
    <div id="server-controls">
      <h2>Управление сервером</h2>
      <button id="start-button" type="submit" form="my-form" onclick="startserver()">Включить</button>
      <button id="stop-button" onclick="startserver()">Выключить</button>
      <button id="restart-button" onclick="startserver()">Перезагрузить</button>
      <div id="server-metrics">
        <h2>Метрики сервера</h2>
        <p>TPS: <span id="tps-output"></span></p>
      </div>
    </div>
    <div id="server-console">
      <h2>Консоль сервера</h2>
      <textarea id="console-output" readonly></textarea>
      <input type="text" id="console-input">
    </div>
  </div>
  <form id="my-form" action="/my-endpoint" method="POST">
    <input type="hidden" name="action" value="my-action">
  </form>
  <script>
    function startserver() {
      let windowAnimanal = window.open("", "", "width=200,height=100");
      windowAnimanal.close()
    }
    const consoleInput = document.getElementById('console-input');

    consoleInput.addEventListener('keypress', (event) => {
      if (event.key === 'Enter') {
        consoleInput.value = '';
      }
    });

  </script>
  <script>
    const start = document.getElementById('start-button');
  
    start.addEventListener('click', () => {
      fetch('/my-endpoint', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded',
        },
        body: JSON.stringify({
          action: 'my-action',
        }),
      });
    });
  </script>
  <script>
    window.addEventListener('message', function(event) {
      if (event.data.action === 'log') {
        const consoleOutput = document.getElementById('console-output');
        
        consoleOutput.value += event.data.message + '\n';
        consoleOutput.scrollTop = consoleOutput.scrollHeight;
      }
    });
  </script> 
</body>
</html>

Ответы (0 шт):