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
 | |
| 
 |