У меня есть небольшой скрипт, который запускается и каждые полчаса передает команду в Java-программу (диспетчер игрового сервера), как если бы пользователь ее набирал. Однако, прочитав документацию и экспериментируя, я не могу понять, как мне получить две вещи:
1) Версия, которая позволяет пользователю вводить команды в windoe терминала, и они будут отправляться на вход менеджера сервера так же, как команда «save-all».
2) Версия, которая продолжает работать, но отправляет любые новые данные в саму систему, устраняя необходимость во втором окне терминала. Это на самом деле наполовину происходит сейчас, так как когда что-то набирается, визуальной обратной связи нет, но как только программа заканчивается, становится ясно, что терминал получил ввод. Например, список содержимого каталога будет там, если «dir» был введен во время работы программы. Это больше для понимания, чем для практичности.
Спасибо за помощь. Вот сценарий:
from time import sleep
import sys,os
import subprocess
# Launches the server with specified parameters, waits however
# long is specified in saveInterval, then saves the map.
# Edit the value after "saveInterval =" to desired number of minutes.
# Default is 30
saveInterval = 30
# Start the server. Substitute the launch command with whatever you please.
p = subprocess.Popen('java -Xmx1024M -Xms1024M -jar minecraft_server.jar',
shell=False,
stdin=subprocess.PIPE);
while(True):
sleep(saveInterval*60)
# Comment out these two lines if you want the save to happen silently.
p.stdin.write("say Backing up map...\n")
p.stdin.flush()
# Stop all other saves to prevent corruption.
p.stdin.write("save-off\n")
p.stdin.flush()
sleep(1)
# Perform save
p.stdin.write("save-all\n")
p.stdin.flush()
sleep(10)
# Allow other saves again.
p.stdin.write("save-on\n")
p.stdin.flush()