コマンドを送信して出力を受け取ることができるミニクラフトサーバーラッパーを作成しようとしています。最終的には、私はホーム・サーバをリモートで制御して/ secondコマンドを再起動するようにソケット・インタフェースを付けます。Pythonのサブプロセスが対話でハングする
このため、私はpythonサブプロセス・モジュールを使用してサーバを起動し、コマンドを実行し、サーバーの出力を受信します。今、私は問題に遭遇しています。サーバーの出力を取得して画面に反映させることができますが、プロセスに送信する最初のコマンドはすべてをフリーズしてしまいます。 私はprocess.communicate行を削除しようとしましたが、print(コマンド)で置き換えようとしています。
from subprocess import Popen, PIPE
from threading import Thread
import threading
def listen(process):
while process.poll() is None:
output = process.stdout.readline()
print(str(output))
def talk(process):
command = input("Enter command: ")
while command != "exit_wrapper":
#freezes on first send command
parse_command(process, command)
command = input("Enter command: ")
print("EXITTING! KILLING SERVER!")
process.kill()
def parse_command(process, command):
process.communicate(command.encode())
def main():
process = Popen("C:\\Minecraft Servers\\ServerStart.bat", cwd = "C:\\Minecraft Servers\\", stdout=PIPE, stdin=PIPE)
listener = Thread(None, listen, None, kwargs={'process':process})
listener.start()
talker = Thread(None, talk, None, kwargs={'process':process})
talker.start()
listener.join()
talker.join()
if __name__ == "__main__":
main()
提供するすべてのヘルプをいただければ幸いです。また、これは次のように私の非常に基本的な現在のコードがあるプロセスを凍結しました!