如何在运行时管理标准输入和不在进程中?

问题描述 投票:0回答:1

我正在尝试通过子流程模块控制子流程。

我正尝试使用其标准输出从Minecraft基岩服务器软件中读取。但是,当我向stdin写入内容时,它会通过,但之后再从stdout中读取时,它将被阻止。

import subprocess as sp
proc = sp.Popen([r"C:\Users\jbloo\Documents\VSCode\Python\bedrock-server-1.12.1.1\bedrock_server.exe"], 
stdout=sp.PIPE, stderr=sp.STDOUT, stdin=sp.PIPE,  universal_newlines=True)
with proc:
    while True:
        # print("Trying to communicate")
        output = proc.stdout.readline().strip()
        print(output)
        if "Server started." in output:
            break
    while True:
        command = input("Command: ", ) + "\n"
        # command  = bytes(command, "utf-8")
        proc.stdin.write(command)
        print("Wrote")
        print(proc.stdout.readline())

我尝试了许多其他解决方案,但似乎无法理解。

这是终端的结束。

[2019-10-17 01:22:04 INFO] IPv4 supported, port: 19132
[2019-10-17 01:22:04 INFO] IPv6 supported, port: 19133
[2019-10-17 01:22:05 INFO] IPv4 supported, port: 54072
[2019-10-17 01:22:05 INFO] IPv6 supported, port: 54073
[2019-10-17 01:22:05 INFO] Server started.
Command: sdf
Wrote

STDOUT无法读取。它只是被阻止!

python python-3.x subprocess
1个回答
0
投票

readline是一个阻止呼叫。读取直到换行符或EOF。

我不确定,但是问题是由于子进程在您发送命令后未向Stdout写入任何内容。因此,父进程正在等待readline函数。

© www.soinside.com 2019 - 2024. All rights reserved.