diff --git a/mcwrap/mcwrap.py b/mcwrap/mcwrap.py new file mode 100644 index 0000000..f632f58 --- /dev/null +++ b/mcwrap/mcwrap.py @@ -0,0 +1,45 @@ +from __future__ import unicode_literals, print_function + +import io +import os +import subprocess +import sys +import threading + + +def main(): + os.chdir(os.path.expanduser('~/tmp')) + with open('eula.txt', 'w') as eula: + eula.write('eula=true\n') + jar = os.path.expanduser('~/tmp/minecraft_server.1.10.2.jar') + command = [ + 'java', '-Xmx2560M', '-Xmn128M', '-jar', jar, '-o', 'true', 'nogui' + ] + print('Running pid={} command="{}"'.format(os.getpid(), ' '.join(command))) + minecraft = subprocess.Popen( + command, stdout=subprocess.PIPE, stdin=subprocess.PIPE + ) + try: + stdout_buf = io.BytesIO() + stdout_thread = threading.Thread( + target=_tee, args=(minecraft.stdout, stdout_buf) + ) + stdout_thread.run() + minecraft.wait() + return 1 + except KeyboardInterrupt: + print('Terminating pid={}'.format(os.getpid())) + minecraft.terminate() + return 0 + return 0 + + +def _tee(stdout, tee_out): + for line in stdout: + print(line, file=sys.stdout, end='') + tee_out.write(line) + tee_out.flush() + + +if __name__ == '__main__': + sys.exit(main())