python - 使用 subprocess.Popen 执行 bash

标签 python bash subprocess

我正在尝试使用 python 为 bash session 编写包装器。 我做的第一件事就是尝试生成一个 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 的 stdout 读取失败,当我尝试写入 stdin 时,出现管道损坏错误。 我做错了什么?

再次澄清一下,我对通过 bash 运行单个命令然后检索其输出不感兴趣,我希望在某个进程中运行一个 bash session ,我可以通过管道与之通信。

最佳答案

这个有效:

import subprocess
command = "ls"
p = subprocess.Popen(command, shell=True, bufsize=0, stdout=subprocess.PIPE, universal_newlines=True)
p.wait()
output = p.stdout.read()
p.stdout.close()

关于python - 使用 subprocess.Popen 执行 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7206519/

相关文章:

Python matplotlib 和绘制日期时间信息

python - 按顺序为数据框中的多行从列表中分配多个值

bash - 使用纯 bash 创建 URL 友好的 slug?

git - 如何在终端右侧显示 git 状态信息?

python - 您可以只与子流程通信一次吗?

python - 将重复的字典项目转换为具有 ID 数组的唯一项目

python - 依次组合两个列表

c++ - 被管道弄糊涂了。 'cat -A' 似乎过滤掉了部分输出

python - 在 Python 中禁用 subprocess.Popen 的控制台输出

python-2.7 - 处理由 Python 代码产生的 C++ 子进程引起的段错误