在日常的Python开发中,我们经常需要调用系统命令、运行其他程序或脚本。这时,Python subprocess 模块就派上大用场了!它是Python标准库中用于创建和管理子进程的核心工具。
本文将带你从零开始,深入浅出地学习 subprocess模块教程,即使你是编程小白,也能轻松掌握如何使用它来执行外部命令、获取输出结果、处理错误等实用技能。
subprocess 是Python内置的标准库模块,用于生成新进程、连接到它们的输入/输出/错误管道,并获取它们的返回码。相比老旧的 os.system() 或 popen(),subprocess模块更安全、功能更强大,是官方推荐的子进程管理方式。
最常用的方法是 subprocess.run(),它能以简单的方式运行命令并等待其完成。
import subprocess# 执行一个简单的命令(例如列出当前目录)result = subprocess.run(['ls', '-l'], capture_output=True, text=True)print("返回码:", result.returncode)print("标准输出:\n", result.stdout)print("标准错误:\n", result.stderr) 参数说明:
['ls', '-l']:命令以列表形式传入,避免shell注入风险。capture_output=True:捕获标准输出和标准错误。text=True:以字符串形式返回输出(否则是字节)。有时你需要使用shell特性(如管道、重定向),可以设置 shell=True,但要注意安全风险!
import subprocess# 使用shell执行带管道的命令result = subprocess.run( "echo 'Hello World' | grep Hello", shell=True, capture_output=True, text=True)print(result.stdout) # 输出: Hello World ⚠️ 警告:当使用用户输入构建命令时,不要使用 shell=True,否则可能引发命令注入漏洞! 你可以设置超时时间,并捕获异常:
import subprocesstry: result = subprocess.run( ['ping', 'google.com'], capture_output=True, text=True, timeout=5 # 5秒超时 )except subprocess.TimeoutExpired: print("命令执行超时!")else: if result.returncode == 0: print("成功!") else: print("命令失败:", result.stderr) 如果你需要与子进程实时交互(如发送输入、读取输出流),可以使用 subprocess.Popen:
import subprocess# 启动一个交互式进程(例如Python解释器)proc = subprocess.Popen( ['python3', '-i'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)# 发送命令proc.stdin.write('print("你好,subprocess!")\n')proc.stdin.write('exit()\n')proc.stdin.flush()# 读取输出output, error = proc.communicate()print("输出:", output) 通过本教程,你已经掌握了 Python subprocess 模块的基本和进阶用法。无论是执行简单命令、处理输出,还是进行复杂的进程交互,subprocess 都能胜任。
记住几个关键点:
subprocess.run() 处理一次性命令。shell=True。capture_output、text 和 timeout 参数。Popen。现在,你已经具备了使用 Python调用外部命令 的核心能力!快去尝试写一个自动化脚本吧!
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251210332.html