编辑:我正在Windows上运行此服务器,因为服务器是在我的主要游戏装备上管理的]
我正在尝试创建一个Minecraft服务器控制器,以便可以简化管理服务器的过程。我已经能够使用子进程启动和停止服务器,而不会出现问题,但是当我尝试使其发出命令时,它将不会。除非我使用subprocess.communicate()
,否则此解决方案的问题是它将导致脚本永远等待并最终崩溃,从而使服务器继续运行。这是我所拥有的代码。
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):
self.server = subprocess.Popen(self.server_start_bat, cwd=self.dir, shell=True, stdin=subprocess.PIPE,
universal_newlines=True, text=True)
def stop_server(self):
self.run_command('stop')
self.server.communicate()
def op_me(self):
self.run_command(f'op Username')
def clear_weather(self):
self.run_command(f'weather clear 1000000')
def mob_griefing_on(self):
self.run_command(f'gamerule mobGriefing True')
def mob_griefing_off(self):
self.run_command(f'gamerule mobGriefing True')
def set_time_day(self):
self.run_command(f'time set day')
def set_time_night(self):
self.run_command(f'time set night')
def run_command(self, command_text):
self.server.stdin.write(f'{command_text}\n')
编辑:我正在Windows上运行此程序,因为服务器是在我的主要游戏装备上进行管理的,所以我试图创建一个Minecraft服务器控制器,以便可以简化管理过程...