You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.6 KiB
73 lines
2.6 KiB
#!/usr/bin/env python3
|
|
|
|
# runs minetestserver using the paths defined by minetestinfo
|
|
|
|
import os
|
|
from mtanalyze.minetestinfo import *
|
|
import subprocess, signal
|
|
game_id = "ENLIVEN"
|
|
#screen -S MinetestServer $mts --gameid ENLIVEN --worldname FCAGameAWorld
|
|
print()
|
|
print()
|
|
print()
|
|
|
|
if not minetestinfo.contains("minetestserver_path"):
|
|
print("[ mtsenliven.py ] ERROR: minetestserver_path"
|
|
" was not found in your version of minetestinfo.py")
|
|
exit(1)
|
|
|
|
mts = minetestinfo.get_var("minetestserver_path")
|
|
if not minetestinfo.contains("primary_world_path"):
|
|
print("[ mtsenliven.py ] ERROR: primary_world_path"
|
|
"was selected by minetestinfo.py")
|
|
exit(2)
|
|
wp = minetestinfo.get_var("primary_world_path")
|
|
wn = os.path.basename(wp)
|
|
print("Using minetestserver: " + mts)
|
|
print("Using primary_world_path: " + wp)
|
|
print("Using world_name: " + wn)
|
|
print()
|
|
process = subprocess.Popen(
|
|
[mts, '--gameid', game_id, '--worldname', wn],
|
|
stdout=subprocess.PIPE
|
|
)
|
|
msg_flags = ["WARNING[Server]: ", "ACTION[Server]: "]
|
|
msg_lists = {} # where flag is key
|
|
for flag in msg_flags:
|
|
msg_lists[flag] = []
|
|
# see https://www.endpoint.com/blog/2015/01/28/getting-realtime-output-
|
|
# using-python
|
|
while True:
|
|
try:
|
|
output_original = process.stdout.readline()
|
|
if output_original == '' and process.poll() is not None:
|
|
break
|
|
if output_original:
|
|
output = output_original.decode("utf-8")
|
|
# works on python2 or 3
|
|
output_strip = output.strip()
|
|
# (output_original is bytes)
|
|
show_enable = True
|
|
found_flag = None
|
|
f_i = None
|
|
for flag in msg_flags:
|
|
# such as '2018-02-06 21:08:06: WARNING[Server]: Deprecated call to get_look_yaw, use get_look_horizontal instead'
|
|
# or 2018-02-06 21:08:05: ACTION[Server]: [playereffects] Wrote playereffects data into /home/owner/.minetest/worlds/FCAGameAWorld/playereffects.mt.
|
|
f_i = output.find(flag)
|
|
if f_i >= 0:
|
|
found_flag = flag
|
|
break
|
|
if found_flag:
|
|
sub_msg = output[f_i+len(flag):].strip()
|
|
if sub_msg in msg_lists[found_flag]
|
|
show_enable = False
|
|
else:
|
|
msg_lists[found_flag].append(sub_msg)
|
|
if show_enable:
|
|
print(output_strip)
|
|
if found_flag is not None:
|
|
print("[ mtsenliven.py ] INFO: this is the last"
|
|
" time the message above will be shown")
|
|
rc = process.poll()
|
|
except KeyboardInterrupt:
|
|
break
|
|
|