使用python控制“我的世界”服务器 [英] Controlling a minecraft server with python
本文介绍了使用python控制“我的世界”服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经为此搜索了很多次,但还没有找到一个确定的解决方案。我找到的最接近的东西是:
import shutil
from os.path import join
import os
import time
import sys
minecraft_dir = ('server diectory')
world_dir = ('server world driectory')
def server_command(cmd):
os.system('screen -S -X stuff "{} 15"'.format(cmd))
on = "1"
while True:
command=input()
command=command.lower()
if on == "1":
if command==("start"):
os.chdir(minecraft_dir)
os.system('"C:Program FilesJavajre1.8.0_111injava.exe" -Xms4G -Xmx4G -jar craftbukkit-1.10.2.jar nogui java')
print("Server started.")
on = "0"
else:
server_command(command)
当我启动此程序并键入‘start’时,CMD会立即闪现并关闭。取而代之的是,我希望CMD保持开放,而"我的世界"服务器从它运行。我不确定为什么会发生这种情况,也不知道问题是什么,如果有任何帮助,我们将不胜感激。
附注:我已经根据需要对其进行了编辑(例如删除了不必要的备份脚本),但以前不起作用。原始链接为:https://github.com/tschuy/minecraft-server-control
推荐答案
os.system
将只运行该命令,然后返回到您的Python脚本,无法与其进一步通信。
另一方面,使用subprocess.Popen
可以在进程运行时访问它,包括写入它的.stdin
,这就是将数据发送到服务器的方式:
def server_command(cmd):
process.stdin.write(cmd+"
") #just write the command to the input stream
process = None
executable = '"C:Program FilesJavajre1.8.0_111injava.exe" -Xms4G -Xmx4G -jar craftbukkit-1.10.2.jar nogui java'
while True:
command=input()
command=command.lower()
if process is not None:
if command==("start"):
os.chdir(minecraft_dir)
process = subprocess.Popen(executable, stdin=subprocess.PIPE)
print("Server started.")
else:
server_command(command)
您还可以传递stdout=subprocess.PIPE
,以便还可以读取它的输出和stderr=subprocess.PIPE
以读取它的错误流(如果有)
此外,您还可以使用打印函数的file
可选参数,而不是process.stdin.write(cmd+"
")
,因此:
print(cmd, file=process.stdin)
会将数据写入process.stdin,格式与打印通常相同,类似于以换行符结束,除非传递end=
以覆盖它,依此类推。
这篇关于使用python控制“我的世界”服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文