如何使用Python subprocess响应bash中的交互式程序
Python交互bash脚本实现方案
可以实现,借助Python标准库subprocess模块即可完成全部需求,无需修改原有bash脚本。
完整代码示例
import subprocess # 启动sh example.sh子进程 proc = subprocess.Popen( ["sh", "example.sh"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True ) # 自动注入输入内容并等待脚本执行完成,获取输出 stdout, stderr = proc.communicate(input="python\n") # 处理输出得到问候语 greeting = stdout.strip() print(f"读取到的问候语:{greeting}")
实现逻辑说明
- 调用
subprocess.Popen启动sh example.sh子进程,同时将子进程的标准输入、标准输出、标准错误绑定到Python的管道,text=True参数设置输入输出为字符串格式,无需手动进行bytes和字符串的编解码转换 - 调用
proc.communicate(input="python\n")向子进程自动注入输入内容python加换行符,匹配bash脚本的read读取逻辑,方法会阻塞等待子进程执行完成后返回子进程的所有标准输出、标准错误内容 - 对返回的标准输出内容做首尾空白符清理后,即可得到
Hi python!的问候语内容,后续可以在Python中直接使用该变量。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

