子进程 Popen stdin 只会在脚本完成后输入和运行



描述:

我试图制作一个可以在聊天软件上交互式的 shell,所以我需要一个cmd.exe作为子进程并将字符串传递到进程中。

我有这个:

from subprocess import Popen
from subprocess import PIPE as p
proc = Popen("cmd",stdout=p,stdin=p,shell=True)

因此,如果我们需要将输入传递给流程,通常我们要做的是使用proc.stdin.write()但似乎字符串只有在 Python 脚本完成后才会传入并工作

例如,我有

#same thing above
proc.stdin.write("ping 127.0.0.1".encode())
time.sleep(10)

脚本将等待 10 秒,然后通过并运行ping命令。 这意味着不可能得到结果stdout.read()因为什么都没有。

我尝试使用subprocess.Popen.communicate()但它在一次输入后关闭管道。

有没有办法解决"脚本完成后才运行命令"的事情,或者communicate()不关闭管道?

对管道的写入是缓冲的,您需要刷新缓冲区。

proc.stdin.write("ping 127.0.0.1".encode())
proc.stdin.flush()

最新更新