Suprocess process.stdout.readline () останавливает программу - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь заставить программу python взаимодействовать с сервером Minecraft, который я размещаю, но проблема, которую я обнаруживаю, заключается в том, что когда консоль выводит данные с сервера, она зависает.Я использую Popen и PIPE из подпроцесса, и всякий раз, когда я использую process.stdout.readline (), он печатает все строки, а когда это делается, он останавливает программу, и тогда я не могу выполнить больше команд из-за этого.

def start(cmd):
    try:
        process = Popen(cmd, stdin=PIPE, stdout=PIPE)
    except Exception as e:
        print(e)
    return process
start('java -Xmx1024M -Xms1024M -jar server.jar nogui') # runs the minecraft server with 8GB of RAM
while True:
    print(process.stdout.readline()) # prints out every line in the server console
    readmail() # the program checks email for commands, and enters the command into the console using stdin

Я пробовал это:

def start(cmd):
    try:
        process = Popen(['python', '-u', cmd], stdin=PIPE, stdout=PIPE)
    except Exception as e:
        print(e)
    return process

Это исправляет проблему с process.stdout.readline(), но выдает ошибку, потому что команда должна вызываться в cmd ине с питоном.Кто-нибудь знает, как решить проблему с readline()?

...