python调用命令行脚本

本文详细介绍了Python中阻塞态和非阻塞态调用的区别,主要涉及os模块的popen和system方法以及subprocess模块的call和popen函数。阻塞态调用会在脚本执行完后继续执行,而非阻塞态调用则通过子进程实现并发。os.system返回程序状态,os.popen返回脚本输出;subprocess.call简单调用,popen允许设置工作目录和环境变量。了解这些概念对于优化Python程序的执行效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阻塞态调用和非阻塞态调用,这两个名字是自己根据调用的特点给区分的。
两者主要的区别在于是否会另外开辟一个子进程去调用这些命令行的脚本。在所谓的阻塞态调用下,python会等待这个脚本执行完毕再顺序往下执行其它的程序。
在所谓的非阻塞态调用下,python则会开辟一个子进程,将脚本放在子进程里面执行,自己则立刻向下运行。

阻塞态调用

使用os模块,主要涉及到popen和system两种方法。
这两种方法的区别参考一下链接
os.system(cmd) 返回的是程序运行的结果状态,比如程序运行成功,则返回0,有错误则返回其对应的错误代码
os.popen(cmd) 返回的是程序输出的结果,比如cmd=“ls”的时候,通过popen就可以得到ls的结果

cmd = "echo hello wolrd"
ret = os.popen(cmd)
information = os.system(cmd)

非阻塞态调用

非阻塞态调用主要用到了subprocess 这个模块
简单的用法就用subprocess.call(cmd)就可以了
更高级复杂的用法可以使用subprocess.popen(cmd)
比如说有时候因为环境变量的配置我们需要在特点的目录下执行脚本,就可以使用subprocess.popen的cwd参数,要配置环境变量而不是继承原有的环境变量可以使用env参数

workingDirector = r"E:/code"
cmd = r"test.bat"
subprocess.popen(cmd,cwd=workingDirector)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值