描述:
我试图制作一个可以在聊天软件上交互式的 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()