说明:
[我试图制作一个可以在聊天软件上进行交互的外壳,所以我需要一个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()
,但一次输入后它将关闭管道。
有什么方法可以解决“仅在脚本完成后运行命令”的问题,或者使communication()无法关闭管道?
写入管道的内容已缓冲,您需要刷新缓冲区。
proc.stdin.write("ping 127.0.0.1".encode())
proc.stdin.flush()