Python subprocess模块与Shell交互:如何避免代码卡死并正确获取输出?

python subprocess模块与shell交互:如何避免代码卡死并正确获取输出?

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生成,不代表软件指南立场。本站不负任何法律责任。

如若转载请注明出处:http://www.down96.com/tutorials/8321.html

热心网友热心网友
上一篇 2025-04-11 15:56
下一篇 2025-04-11 15:56

相关推荐

本站[软件指南]所有内容来自互联网投稿或AI智能生成,并不代表软件指南的立场。