Python subprocess 模块与Shell交互的进阶技巧
在Python系统管理或自动化任务中,经常需要与Shell交互。本文探讨如何使用subprocess模块高效地与Shell进行多次交互,如同在终端中一样灵活地执行命令并获取结果。
许多开发者尝试使用subprocess.Popen模拟Shell交互,却常遇到代码卡死或无法获取预期输出的问题。例如,直接用subprocess.Popen启动Shell进程(如/bin/bash),然后循环输入命令,往往得不到正确响应。
根本原因在于,Shell命令通常以换行符(n)作为结束标志。仅发送命令字符串,Shell无法识别命令结束,导致命令执行失败,程序陷入阻塞。
立即学习“Python免费学习笔记(深入)”;
让我们分析一段典型的错误代码:
import subprocessprocess = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)while True: cmd = input("$ ") if cmd == "exit": break cmd = cmd.encode('utf-8') print('cmd',cmd) process.stdin.write(cmd) process.stdin.flush() output = process.stdout.readline().decode('utf-8') print(output.strip())
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。