Python如何执行外部命令


这篇文章主要介绍“Python如何执行外部命令”的相关知识,免费云主机域名小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python如何执行外部命令”文章能帮助大家解决问题。subeprocess模块是python自带的模块,无需安装,主要用来取代一些就的模块或方法,如os.system、os.spawn*、os.popen、commands.*等。因此执行外部命令优先使用subprocess模块subprocess.run()方法是官方推荐的方法,几乎所有的工作都可以用它来完成。
如下是函数源码:该函数返回一个CompletedProcess类(有属性传入参数及返回值)的实例,该函数的参数有很多,只需要记住常用的即可1、args : 代表需要在操作系统中执行的命令,可以是字符串形式(要求shell=True),也可以是list列表类型
2、* :代表可变参数,一般是列表或者字典类型
3、stdin、stdout、stderr :指定了可执行程序的标准输入、标准输出、标准错误文件句柄
4、shell :代表着程序是否需要在shell上执行,当想使用shell的特性时,设置shell=True,这样就可以使用shell指令的管道、文件名称通配符、环境变量等,不过python也提供了很多类似shell的模块,如glob、fnmatch、os.walk()、os.path.expandvars()、os.path.expanduser()和shutil。
5、check :如果check设置为True,就检查命令的返回值,当返回值为0时,将抛出AclledProcessError的异常
6、timeout :设置超时时间,如果超时则kill掉子进程1.使用字符串方式执行shell命令结果展示[root@localhost python]# ./1.py
total 184980
-rw-r–r–. 1 root root 10865 May 8 16:21 123.txtCompletedProcess(args=’ls -l /ltp | head -2′, returncode=0)2ls -l /ltp | head -202.使用列表方式执行个人感觉方法二不好用,尤其是想要使用管道符号时,很难用执行结果[root@localhost python]# ./2.py
total 10865
-rw-r–r–. 1 root root 10865 May 8 16:21 123.txt
CompletedProcess(args=[‘ls’, ‘-l’, ‘/ltp’], returncode=0)
[‘ls’, ‘-l’, ‘/ltp’]
03.捕获脚本输出如果需要采集命令执行的结果,可以传入参数stdout=subprocess.PIPE结果显示[root@localhost python]# ./1.py
b’total 184980
-rw-r–r–. 1 root root 10865 May 8 16:21 123.txt
‘4.检测异常示例1:模拟renturncode值不为0传入参数check=True,当返回值不为0时,就会抛出异常执行结果:返回了CalledProcessError 类型报错示例2:模拟执行超时返回 TimeoutExpired 异常显示结果[root@localhost python]# ./1.py
Traceback (most recent call last):
File “/usr/local/python3/lib/python3.7/subprocess.py”, line 474, in run
stdout, stderr = process.communicate(input, timeout=timeout)
File “/usr/local/python3/lib/python3.7/subprocess.py”, line 939, in communicate
stdout, stderr = self._communicate(input, endtime, timeout)
File “/usr/local/python3/lib/python3.7/subprocess.py”, line 1682, in _communicate
self._check_timeout(endtime, orig_timeout)
File “/usr/local/python3/lib/python3.7/subprocess.py”, line 982, in _check_timeout
raise TimeoutExpired(self.args, orig_timeout)
subprocess.TimeoutExpired: Command ‘while 2>1;do sleep 1;done’ timed out after 3 secondsDuring handling of the above exception, another exception occurred:Traceback (most recent call last):
File “./1.py”, line 3, in
b=subprocess.run(“while 2>1;do sleep 1;done”,timeout=3, shell=True, stdout=subprocess.PIPE, check=True)
File “/usr/local/python3/lib/python3.7/subprocess.py”, line 479, in run
stderr=stderr)
subprocess.TimeoutExpired: Command ‘while 2>1;do sleep 1;done’ timed out after 3 seconds
1.初步认识Popen类首先来看一下Popen类的构造函数参数 字符串或列表bufsize0 : 无缓冲2.Popen的使用方法1、subprocess.Popen([“cat”, “abc.txt”])
2、subprocess.Popen(“cat abc.txt”, shell=True)上面的第二种其实就相当于:subprocess.Popen([“/bin/bash”, “-c”, “cat abc.txt”])示例:Popen类的对象方法补充:其他方法1、subeprocess.call(*args,**kwargs): call()方法调用Popen()执行程序,并且等待它执行完成
2、subpeocess.check_call(*args, **kwargs): 调用上面的call(),如果返回值非零,返回异常
3、subprocess.check_output(*args, **kwargs) : 调用Popen()执行程序,并返回标准输出示例:执行结果[root@localhost python]# ./4.py
total 184980
-rw-r–r–. 1 root root 10865 May 8 16:21 123.txt执行成功与subprocess.Popen()类似,就不写了补充:subprocess.run()和subprocess.Popen()的执行结果是写入到缓存的,可以执行结束后打印结果,不会实时在终端输出;而os.system()是实时输出到终端界面的;关于“Python如何执行外部命令”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: 酒水行业小程序开发的基础功能有哪些

这篇文章主要介绍了酒水行业小程序开发的基础功能有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在线商城在线商城包含商品种类、商品信息,对于销售人员,图片更容易辨别,而商品信息作为次要的,提高…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/09 16:13
下一篇 09/09 19:26

相关推荐