2016-11-22 11 views
0

私はこれを多く探してきましたが、まだ決定的な解決策は見つかりませんでした。私が見つけた最も近いことは次のとおりです。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 "{}\015"'.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 Files\Java\jre1.8.0_111\bin\java.exe" -Xms4G -Xmx4G -jar craftbukkit-1.10.2.jar nogui java') 
      print("Server started.") 
      on = "0" 
    else: 
     server_command(command) 

このプログラムを起動して「スタート」と入力すると、CMDが点滅して即座に閉じます。その代わりに、私はCMDがそれから走っているminecraftの切断で開いたままにしておきたい。なぜこのようなことが起きるのか、それとも何が問題なのか分かりません。どんな助けでも大歓迎です。

p.s.私はこれを私のニーズに合わせて編集しました(不要なバックアップスクリプトを削除するなど)が、以前はうまくいきませんでした。元のリンク:https://github.com/tschuy/minecraft-server-control

+0

なぜそれはPythonで必要ですか?一般に、MinecraftサーバーはJavaで書かれており、サーバーは.batファイルまたは.shファイルで直接実行されます。 – Kerooker

+0

これは、使用方法がわかっている唯一のプログラミングです。また、PCに電子メールでコマンドを実行させたり、サーバーを起動してリモートで制御できるようにしたいと思っています。 –

答えて

0

これは、minecraftクエリを使用する方が簡単になります。サーバーに

os.system(
    'C:\Program Files\Java\jre1.8.0_111\bin\java.exe" -Xms4G -Xmx4G -jar craftbukkit-1.10.2.jar nogui java' 
) 

を開始したい場合は、サーバには、このコマンドを送信し入力し、それが実行されます押した後、(それが閉じCMDを防ぐことができます)無限ループを作成し、入力するのを待つお願いしますスクリプトを書きます。

0

os.systemは、単にコマンドを実行し、Pythonスクリプトに戻って、それと通信できません。あなたもそうstdout=subprocess.PIPEをあなたがすることができます渡すことができ

def server_command(cmd): 
    process.stdin.write(cmd+"\n") #just write the command to the input stream 
process = None 
executable = '"C:\Program Files\Java\jre1.8.0_111\bin\java.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) 

:それはそれへの書き込みを含め、実行中subprocess.Popenを使用して一方

は、サーバーにデータを送信する方法である.stdinをだあなたは、プロセスへのアクセスを提供しますまた、それを読むとそのエラーストリーム(もしあれば)から読むstderr=subprocess.PIPE

関連する問題