Я использую несколько модифицированных серверов Minecraft для друзей на своем P C, я пытаюсь создать программу, которая делает их запуск и отправку команд им намного проще.
Я запускаю серверы, используя файл bat и смог заставить subprocess
сделать это без проблем, но я не уверен, как go добавить функциональность выдачи команд на сервер через консоль.
У меня есть подумал об использовании stdin.write()
и в интерактивной консоли он прекрасно работает. Проблема в том, что когда я добавляю его в код, он выполняет команду остановки еще до запуска сервера, поэтому сервер никогда не останавливается. Я пытался сделать это в отдельной функции, но это тоже не сработало.
Вот мой код:
Файл класса:
import subprocess
class Server:
def __init__(self, server_start_bat, dir):
self.server_start_bat = server_start_bat
self.dir =dir
def start_server(self):
server = subprocess.Popen(self.server_start_bat, cwd=self.dir, shell=True, stdin=subprocess.PIPE, text=True)
server.communicate()
def stop_server(self):
server = subprocess.Popen(self.server_start_bat, cwd=self.dir, shell=True, stdin=subprocess.PIPE, text=True)
server.stdin.write('stop\n')
def command(self, command):
server = subprocess.Popen(self.server_start_bat, cwd=self.dir, shell=True, stdin=subprocess.PIPE, text=True)
self.command = command
server.stdin.write(f'{self.command}\n')
Простой GUI Я пробежал через это:
from tkinter import *
import Servers
server = Servers.Server('path\\to\\bat\\file\\batfile.bat', 'dir\\to\\run\\command\\in')
main = Tk()
main.title('Server Commander')
server_title = Label(main, text="server, hosted on port ")
server_title.pack()
server_start = Button(main, text='Start', command=server.start_server)
server_start.pack()
server_stop = Button(main, text='Stop', command=server.stop_server)
server_stop.pack()
main.mainloop()