【发布时间】:2011-08-26 14:50:21
【问题描述】:
我正在尝试使用 python 为 bash 会话编写一个包装器。 我做的第一件事就是尝试生成一个 bash 进程,然后尝试读取它的输出。像这样:
from subprocess import Popen, PIPE
bash = Popen("bash", stdin = PIPE, stdout = PIPE, stderr = PIPE)
prompt = bash.stdout.read()
bash.stdin.write("ls\n")
ls_output = bash.stdout.read()
但这不起作用。首先,在创建进程后从 bash 的标准输出读取失败,当我尝试写入标准输入时,我得到了一个损坏的管道错误。 我做错了什么?
再次澄清一下,我对通过 bash 运行单个命令然后检索其输出不感兴趣,我希望在某个进程中运行一个 bash 会话,我可以通过管道与之通信。
【问题讨论】:
-
听起来你需要一个 Expect 模块:noah.org/wiki/…
-
好的,我想我找到了我需要的东西。 Python 有一个名为 pty 的模块,它带有一个 fork,它在类似终端的环境中生成一个子进程并返回一个读/写 fd 给它。然后我可以在孩子中执行 bash。
标签: python bash subprocess