Я пишу панель управления сервером minecraft. Сейчас занимаюсь консолью сервера. Когда пользователь даст команду, сервер должен запуститься. Но проблема в том, что пользователь должен видеть ВЕСЬ процесс запуска. От момента генерации миров до загрузки всех плагинов. Я же сделал только подключение по Rcon.
Но дело в том, что rcon запускается только после запуска сервера. Соответственно он не поможет мне дать пользователю весь лог сервера. Также нужно сделать вывод этого на сайт. (Использую Flask) Получается, нужно каким то образом отслеживать каждую строчку при запуске сервера?
Вот что-то подобное хочу сделать
Отслеживать
задан 16 июн 2020 в 9:08
19 6 6 бронзовых знаков
Почитать книжки
16 июн 2020 в 9:11
16 июн 2020 в 10:06
16 июн 2020 в 15:28
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
пользователь должен видеть ВЕСЬ процесс запуска
Вы можете подключиться к консоли сервера через subprocess и получать вывод оттуда.
СОЗДАЛ МАЙНКРАФТ НА PYTHON! | #2
Есть вариант подождать завершения процесса и получить весь вывод за раз:
import subprocess raw_output = subprocess.check_output([r»ServerServerStart.bat»], shell = True) #путь # до bat файла запуска сервера output = raw_output.decode(‘cp866’) # subprocess возвращает результат в байтах, #его нужно преобразовать в текст (можно выбрать другую кодировку) print(output)
И второй вариант — читать вывод процесса в реальном времени:
import subprocess, time cmd = [r»ServerServerStart.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()) #чтение строки
И потом вы можете передавать всё это в вашу консоль на сайте. Надеюсь, помог
Источник: ru.stackoverflow.com
Python Minecraft примеры использования
Python Minecraft — 60 примеров найдено. Это лучшие примеры Python кода для mcpi.minecraft.Minecraft, полученные из open source проектов. Вы можете ставить оценку каждому примеру, чтобы помочь нам улучшить качество примеров.
Язык программирования: Python
Пространство имен/Пакет: mcpi.minecraft
Примеров на hotexamples.com: 60
Основные методы
#-*-coding=cp949 from mcpi.minecraft import Minecraft logan = Minecraft.create() import time pos = logan.player.getPos() x = pos.x y = pos.y z = pos.z #=============================================================================== from random import * i = randint(-128, 128) x = i i = randint(1, 64) y = i i = randint(-128, 128) z = i logan.setBlock(x, y, z, 11) #=============================================================================== #=============================================================================== # try: # x=int(input(«input your x_number :»)) # y=int(input(«input your y_number :»)) # print(x/y) # except: # print(«error») # #
def buttonbluepressed(channel, event): mcb = Minecraft.create() blockinbluecol = mcb.getBlock(pos.x+2, pos.y, pos.z + 10) if blockinbluecol == block.WOOL.id: mc.postToChat(«Super work!») mcb.setBlock(pos.x+2, pos.y, pos.z + 10,block.WOOL.id,0)
from mcpi.minecraft import Minecraft as M mc = M.create() playerPos = mc.player.getTilePos() x = playerPos.x y = playerPos.y z = playerPos.z print(«플레이어의 현재 x 좌표:», x) print(«플레이어의 현재 y 좌표:», y) print(«플레이어의 현재 z 좌표:», z) mc.player.setTilePos(10, 110, 12)
from mcpi.minecraft import Minecraft mc = Minecraft.create(«10.183.3.67», 4711) x, y, z = mc.player.getPos() x = x + 1 mc.setBlocks(x, y, z — 1, x + 15, y + 15, z + 1, 0) mc.setBlock(x, y, z, 1) mc.setBlock(x + 1, y + 1, z, 2) mc.setBlock(x + 2, y + 2, z, 3) mc.setBlock(x + 3, y + 3, z, 4) mc.setBlock(x + 4, y + 4, z, 5) mc.setBlock(x + 5, y + 5, z, 7) mc.setBlock(x + 6, y + 6, z, 14) mc.setBlock(x + 7, y + 7, z, 15) mc.setBlock(x + 8, y + 8, z, 16) mc.setBlock(x + 9, y + 9, z, 17, 0) mc.setBlock(x + 10, y + 10, z, 17, 1) mc.setBlock(x + 11, y + 11, z, 17, 2) mc.setBlock(x + 12, y + 12, z, 18, 0) mc.setBlock(x + 13, y + 13, z, 18, 1) mc.setBlock(x + 14, y + 14, z, 18, 2) mc.postToChat(«StariwayToHeaven»)
СОЗДАЛ МАЙНКРАФТ НА PYTHON!
def __init__(self): self.sonar_map = [] self.mc = Minecraft.create()
from mcpi.minecraft import Minecraft from time import sleep mc = Minecraft.create(«192.168.1.113») class mic: x=0 y=0 z=0 u=1 def playerid(self,n): self.u=mc.getPlayerEntityId(n) print self.u def playerpos(self): x,y,z = mc.entity.getPos(self.u) print x,y,z def pos(self,x,y,z): self.x=x self.y=y self.z=z def setfloor(self,item,width,deep): for erf in range(0,width): for wdz in range(0,deep): print erf,wdz mc.setBlock(self.x+erf,self.y,self.z+wdz, item)
from mcpi.minecraft import Minecraft mc = Minecraft.create(«smalldell1») valid = True x = int(input(«Enter x: «)) y = int(input(«Enter y: «)) z = int(input(«Enter z: «)) if not -127 < x < 127: valid = False # Check if y is not between -63 and 63 # Check if z is not between -127 and 127 if valid: mc.player.setPos(x, y, z) else: mc.postToChat(«Please enter a valid location») # %% count = 1 while count
def init(): mc = Minecraft.create(«192.168.1.13», 4711) x, y, z = mc.player.getPos() return mc
def clear_by_player(size): mc = Minecraft.create() x,y,z = mc.player.getPos() clear_region(x,y,z,size)
from mcpi.minecraft import Minecraft import mcpi.block as block mc = Minecraft.create(«192.168.1.6») # add server ip import time players = mc.getPlayerEntityIds() counter = -500 x = 60 y= 60 cubesize = 5 airsize = cubesize -1 for i in players: mc.entity.setPos(i,x,y, counter) p = mc.entity.getPos(i) print(i) mc.setBlocks(p.x-cubesize,p.y-cubesize,p.z-cubesize,p.x+cubesize,p.y+cubesize,p.z+cubesize, block.OBSIDIAN.id) mc.setBlocks(p.x-airsize,p.y-airsize,p.z-airsize,p.x+airsize,p.y+airsize,p.z+airsize, block.AIR.id) time.sleep(1) mc.postToChat(«lol») mc.entity.setPos(i,x,y,counter) counter =+ 20 mc.postToChat(«you need to teleport out»)
def init(): ip = «192.168.7.226» mc = Minecraft.create(ip, 4711) mc.setting(«world_immutable», True) #x, y, z = mc.player.getPos() return mc
def clear_region(x,y,z, size): »’will clear a cube with sides = size»’ mc = Minecraft.create() mc.setBlocks(x-size/2,y-size/2, z-size/2, x+size/2, y+size/2, z+size/2, 0)
# Code by CW Coleman # Base project format. # 127.0.0.1 is locahost (the computer you are working on) from mcpi.minecraft import Minecraft from mcpi import block from time import sleep mc = Minecraft.create(«127.0.0.1», 4711) # This sets the x,y and z location to set blocks. x, y, z = mc.player.getPos() # Clear with ait (air = 0) air = 0 mc.setBlocks(x — 10, y, z — 10, x + 10, y + 20, z + 10, air) # b is a variable for the type of block # create single blocks b = 1 mc.setBlock(x, y, z + 1, b) mc.setBlock(x, y + 2, z + 1, b + 1) mc.setBlock(x, y + 4, z + 1, b + 2) # Create multiple blocks . # Notice ‘w = 35,2’ . This is wool. b = 35, 2 mc.setBlocks(x, y + 5, z, x + 5, y + 20, z + 5, b) # multiple line comment «»» AIR 0 STONE 1 GRASS 2 DIRT 3
def chat(msg=»Whaaat?!»): mc = Minecraft.create() mc.postToChat(msg)
from mcpi.minecraft import Minecraft import time l = » n = (input(‘what is your minecraft username? >’)) k = 4 b = 1 while True: mc = Minecraft.create() i = (input(‘>’)) c = (i) time.sleep(3) mc.postToChat(c) mca = Minecraft.create() inp = (input(‘>’)) ca = (inp) time.sleep(3)
def init(): mc = Minecraft.create(«127.0.0.1», 4711) x, y, z = mc.player.getPos() return mc
class house(): def __init__(self, data): self.data = data def buildhouse(self): x, y, z, L, W, H, M, roof, floor = self.data mc.setBlocks(x, y, z, x + 10, y + 6, z + 10, 220) mc.setBlocks(x + 1, y + 1, z + 1, x + 9, y + 5, z + 9, 0) # 挖空 mc.setBlocks(x + 5, y + 1, z, x + 5, y + 3, z + 1, 0) # 门 mc.setBlocks(x + 8, y + 2, z + 2, x + 10, y + 4, z + 4, block.GLASS.id) # 窗 mc = Minecraft.create(«47.100.46.95», 4782) pos = mc.player.getTilePos() def syfhouse(): reader = csv.reader(open(‘team2_clan.csv’)) data = [] for r in reader: if r[0] == ‘clancenter’: posx = int(r[1]) posy = int(r[2]) posz = int(r[3]) if r[0] == ‘syf’: posx += int(r[1]) posy += int(r[2]) posz += int(r[3])
def hi(): «_mcp: just saying hello» mc = Minecraft.create() mc.postToChat(«Hello!»)
from mcpi.minecraft import Minecraft mc = Minecraft.create() # подключаемся к серверу # координаты x = 100 y = 200 z = 100 mc.player.setPos(x, y, z)
from mcpi.minecraft import Minecraft, ChatEvent from mcpi.minecraftstuff import MinecraftDrawing, MinecraftTurtle from mcpi import block, entity name = «JeremyTsui» # connect to minecraft address = «localhost» mc = Minecraft.create(address) md = MinecraftDrawing(mc) turtle = MinecraftTurtle(mc) # get the x,y,z (position) entity_id = mc.getPlayerEntityId(name) position = mc.entity.getPos(entity_id) x, y, z = int(position.x), int(position.y), int(position.z) ada = MinecraftTurtle(mc) ada.setposition(x, y, z)
def init(): mc = Minecraft.create(«127.0.0.1», 4711) mc.setting(«world_immutable», True) #x, y, z = mc.player.getPos() return mc
# coding: utf-8 # In[ ]: from mcpi.minecraft import Minecraft import time ip = «192.168.1.12» name = «kiki543838» mc = Minecraft.create(‘192.168.1.12’) for x in range(0, 5): mc.postToChat(‘Hello’) time.sleep(1)
def blk(): «_mcp: place 10 blocks of diamond» mc = Minecraft.create() pos = mc.player.getTilePos() for i in range(10): mc.setBlock(pos.x + 1, pos.y + i, pos.z, 57)
from mcpi.minecraft import Minecraft from lekcje.helpers import clear_world mc = Minecraft.create(«minecraft-py.lasyk.info», 4711) clear_world(mc) mc.player.setPos(0, 100, 0)
def specified_pos(): while True: for event in world.events.pollBlockHits(): return event.pos def get_args(): parser = ArgumentParser(«image2blocks») parser.add_argument(«image», help=»250 = width / height») return parser.parse_args() def main(): args = get_args() img = Image.open(args.image).convert(«RGB») img.thumbnail((1000, 191)) print(«Please specify a block . «) pos = specified_pos() # pos = Vec3(0, 0, 0) world.postToChat(«pos:<> size:<>».format(pos, img.size)) with open(«1.8.8.json») as file: blocks = dict(map(desirialize, load(file))) similar_blocks = map(blocks.__getitem__, quantized(img, palette(list(blocks.keys())))) for vec, block in reversed(list(zip(drawing_area(pos, img), similar_blocks))): world.setBlock(vec, block) if __name__ == «__main__»: world = Minecraft.create() main()
from mcpi.minecraft import Minecraft import time import random mc = Minecraft.create() while True: chat = [«Message 1», «Message 2», «Message 3»] thing = random.randint (0,2) mc.postToChat (chat[thing]) time.sleep(3)
def __init__(self, attribs): self.server_address = attribs[«server_address»] self.server_port = attribs.get(«server_port», 4711) self.coords_x = attribs[«coords_x»] self.coords_y = attribs[«coords_y»] self.coords_z = attribs[«coords_z»] self.world_connection = Minecraft.create(self.server_address, self.server_port)
import config import platform from mcpi.minecraft import Minecraft mc = Minecraft.create(config.server_address) mc.postToChat(«Hello » + platform.platform())
report this ad
Источник: python.hotexamples.com
[Разное][Programming] Пишем программы на Python. Урок 1.
[Programming] [Перезалив] Пишем программы на Python. Урок 1.
Python — один из самых простых языков в мире, и активно используется для разработки игр, сайтов и даже мобильных приложений. Google почти весь построен на нем. Он развивает популярность все больше и больше и в конце случится взрыв. Python развивается больше и больше, и имеет огромное число своих юзеров, а также свое комьюнити. Язык прекрасно подойдет вам. если вы хотите научиться программить и не знаете на чем.
Прошу не пинать, так как я не супер-профи-мега-очень ни в Python, ни в составление новостей.
Давайте попробуем установить Python и написать первую простенькую программку.
Я пишу на PYTHON 2.7
Если вы сидите на Windows то открываем python.org и скачиваем с раздела Download нашу версию.
С Ubuntu же надо просто скачать Package в библиотеке пакетов Юбунды)
А вообще советую почитать на тему установки Python в инете, если у кого-то не получилось.
Вот, вы все установили и готовы писать вашу первую программу!
Открываем IDLE безинтерфейса и пишем:
print(«Hello, world»)
Print — функция языка, и она пише в нашу консоль все, что мы вставили скобки, вы может поэкспереминтировать, вставив вместо Hello World любое русское или английское слово.
В каждом языке есть переменные. обычно они управляют всем миром языком.
Если быть точным, переменные — это ячейки памяти в которых что-то сохраняется.
Давайте попробуем сохранить в переменную некое случайное число.
Для этого нам потребуется модуль random
import random* #импортируем 4islo = random.randint(1, 100000) #random.randint создает числа от первого до второго. Первое слева, второе справа print(4islo) #Пишем число
Во многих языках есть комментарии. В Python они тоже присуствуют, и сделаны они ради того чтобы нашему юному разрабу не забыть что он, собственно говоря, кодил.
Выделяются они в данном языке программинга красным цветом и пишутся на одной строке после #(Решетки).
А на этой простенькой программе мы заканчиваем кодить. Люди, я реально не знаю как еще лучше объяснить, простите если что-то не так.
Источник: ru-minecraft.ru