我在我的PC上为朋友运行了许多经过修改的Minecraft服务器,我正在尝试构建一个程序,使启动它们并向它们发送命令变得更加容易。
我使用bat文件启动服务器,并且能够毫无问题地做到这一点,但我不确定如何通过控制台向服务器添加命令的功能。subprocess
我想过使用,在交互式控制台中,它工作得很好。问题是,当我将其添加到代码中时,它会在服务器启动之前执行stop命令,因此服务器永远不会停止。我尝试过在单独的函数中执行此操作,但这也不起作用。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()
哔哔one
相关分类