Как работать с консолью сервера Minecraft на python
Я пишу панель управления сервером minecraft. Сейчас занимаюсь консолью сервера.
Когда пользователь даст команду, сервер должен запуститься.
Но проблема в том, что пользователь должен видеть ВЕСЬ процесс запуска. От момента генерации миров до загрузки всех плагинов.
Я же сделал только подключение по Rcon. Но дело в том, что rcon запускается только после запуска сервера. Соответственно он не поможет мне дать пользователю весь лог сервера.
Также нужно сделать вывод этого на сайт. (Использую Flask)
Получается, нужно каким то образом отслеживать каждую строчку при запуске сервера?
Вот что-то подобное хочу сделать
Ответы (1 шт):
пользователь должен видеть ВЕСЬ процесс запуска
Вы можете подключиться к консоли сервера через subprocess и получать вывод оттуда.
Есть вариант подождать завершения процесса и получить весь вывод за раз:
import subprocess
raw_output = subprocess.check_output([r"Server\ServerStart.bat"], shell = True) #путь
# до bat файла запуска сервера
output = raw_output.decode('cp866') # subprocess возвращает результат в байтах,
#его нужно преобразовать в текст (можно выбрать другую кодировку)
print(output)
И второй вариант - читать вывод процесса в реальном времени:
import subprocess, time
cmd = [r"Server\ServerStart.bat"]
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE, # перенаправление стандартного вывода
stderr=subprocess.STDOUT, # и вывода ошибок
encoding = 'cp866', shell = True)
for line in iter(p.stdout.readline, b''):
time.sleep(0.01) #здесь задержка, чтобы снизить нагрузку на процессор
if line.rstrip() == "": continue #если процесс ничего не выводит (пустая строка)
#можно просто пропустить вывод (чтобы не засорять консоль)
print(line.rstrip()) #чтение строки
И потом вы можете передавать всё это в вашу консоль на сайте. Надеюсь, помог
