subprocess模块
subprocess模块是python自带的,安主要用来取代一些旧的模块或方法,如os.system、os.spawn*、os.popen*、commands.*,因此如果需要用python调用外问命令或任务时,则优先使用subprocess模块。使用subprocess模块可以方便地执行操作系统支持的命令。
一、subprocess.run()方法:
subprocess.run()方法是官方推荐使用的方法,几乎所有工作都可以由它来完成。它的函数原型:
subprocess.run(args,*,stdin=None,input=None,stdout=None,stderr=None,shell=False,cwd=None,timeout=None,check=False,encoding=None,errors=None)
该函数返回一个CompletedProcess类的实例,常用参数:
agrs 代表需要在操作系统中执行的命令,可以是字符串形式(要求shell=True),也可以是列表类型。
* 代表可变参数,一般是列表或字典形式。
stdin、stdout、stderr 指定了可执行程序的标准输入、标准输出、标准错误文件句柄。
shell 代表程序是否需要在shell上执行,当想使用shell的特性时,设置shell=True,这样就可以使用shell指令的管道、文件名称通配符、环境变量等。
check 如果check设置为True,就会检查命令的返回值,当返回值为非0时,将抛出CalledProcessError异常。
timeout 设置超时时间,如果超时,则强制KILL掉子进程。
示例代码:
1 #方法一 2 a=subprocess.run(r"whoami /LOGONID",shell=True) 3 print("1",a) 4 print("2",a.args) 5 print("3",a.returncode) 6 print("------------------------------------------------------") 7 #方法二 8 b = subprocess.run(["whoami","/LOGONID"]) 9 print("1",b) 10 print("2",b.args) 11 print("3",b.returncode) 12 #如果要捕获命令输出: 13 print("------------------------------------------------------") 14 c = subprocess.run(["whoami","/LOGONID"],stdout=subprocess.PIPE) 15 print("1",c) 16 print("2",c.args) 17 print("3",c.returncode) 18 print("4",c.stdout)
返回结果:
S-1-5-5-0-473313
1 CompletedProcess(args='whoami /LOGONID', returncode=0)
2 whoami /LOGONID
3 0
------------------------------------------------------
S-1-5-5-0-473313
1 CompletedProcess(args=['whoami', '/LOGONID'], returncode=0)
2 ['whoami', '/LOGONID']
3 0
------------------------------------------------------
1 CompletedProcess(args=['whoami', '/LOGONID'], returncode=0, stdout=b'S-1-5-5-0-473313\r\n')
2 ['whoami', '/LOGONID']
3 0
4 b'S-1-5-5-0-473313\r\n'
如果传入参数check=True,当returncode不为0时,将会抛出subprocess.CalledProcessError异常;如果传入timeout参数,当运行时间超过timeout时将会抛出TimeoutExpired异常。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix