Python如何执行系统命令


Posted in Python onSeptember 23, 2020

一、背景说明

以前就感觉进步的速度和博客的数量成正比,所以很长一段时间内想不通为什么很多博客为什么到最后很少甚至不在更新了,直到最近自己也快成为断更的一员。

这段时间其实碰到和解决了挺多典型的问题,但上班高负荷运转下班没心思周末觉得太耗费时间,就导致一直拖着没写。

但Python执行系统命令这个问题,从学Python之初就一直在困扰,到最近又反复几次在上边遇到问题,实在是受不了。

二、Python执行系统命令的实现方式

2.1 执行命令不需要获取命令输出--os.system

有时候我们只需要执行命令并不需要获取命令的执行输出,此时我们就可以使用os.system()实现。

os.system()是C语言system()函数的封装,返回命令的退出状态码,命令执行结果输出到标准输出(stdout/窗口)。

使用示例如下:

import os

command = "ifconfig"
exit_code = os.system(command)
# 理论上command是一个字符串,但实际看command还是得变为字节数组
# 当命令中存在中文时可能会报编码错误,此时可以自己给命令编一下码
# exit_code = os.system(command.encode("gbk"))

参考:https://docs.python.org/3/library/os.html#os.system

2.2 执行系统命令并获取命令输出--os.popen()

如果我们想要获取命令的输出os.system()是不能实现的,此时可以使用os.popen()来实现。使用示例如下:

import os

command = "ifconfig"
command_output = os.popen(command).readlines()
print(command_output)

2.3 Python3更好的实现方式--subprocess

Python3引入了封装程序更高的subprocess模块。使用示例如下:

import subprocess

command = "ifconfig"
# 命令如果带参数则不能直接使用字符串的形式,不然后报FileNotFoundError: [Errno 2] No such file or directory: 'ifconfig -a'等错误
# 此时有两种处理办法,一种是写成以空格为分割的列表形式。可借助shlex.split(command_line)实现自动分割
# command = ["ifconfig", "-a"]
# 别一种是将shell参数置为True
# completed_process_obj = subprocess.run(command, shell=True)
# 当配置了stdout参数,completed_process_obj的stdout属性就会保存命令的输出
completed_process_obj = subprocess.run(command, stdout=subprocess.PIPE)
print(completed_process_obj.stdout.decode())
# subprocess.Popen()基础参数和run()差不多,比run()对命令进程有更强的控制能力。其也能用来获取命令输出
# popen_obj = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
# print(popen_obj.stdout.readlines())
# 其他如subprocess.call()、subprocess.check_call()、subprocess.check_output()都是旧方法了,Python3.5+都建议用run()

参考:https://docs.python.org/3/library/os.html#os.popen

以上就是Python如何执行系统命令的详细内容,更多关于Python执行系统命令的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python入门篇之编程习惯与特点
Oct 17 Python
Python中常用信号signal类型实例
Jan 25 Python
redis之django-redis的简单缓存使用
Jun 07 Python
python tkinter界面居中显示的方法
Oct 11 Python
python 调用有道api接口的方法
Jan 03 Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 Python
关于numpy数组轴的使用详解
Dec 05 Python
python随机模块random的22种函数(小结)
May 15 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
Keras - GPU ID 和显存占用设定步骤
Jun 22 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
Python中itertools库的四个函数介绍
Apr 06 Python
Python SMTP发送电子邮件的示例
Sep 23 #Python
python两个list[]相加的实现方法
Sep 23 #Python
python matplotlib库的基本使用
Sep 23 #Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 #Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 #Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 #Python
python中如何打包用户自定义模块
Sep 23 #Python
You might like
php生成WAP页面
2006/10/09 PHP
php 8小时时间差的解决方法小结
2009/12/22 PHP
PHP比你想象的好得多
2014/11/27 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
PHP反射API示例分享
2016/10/08 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
js实现单一html页面两套css切换代码
2013/04/11 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
html5 Canvas画图教程(11)—使用lineTo/arc/bezierCurveTo画椭圆形
2013/01/09 HTML / CSS
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
办理收楼委托书范本
2014/10/09 职场文书
推普标语口号大全
2015/12/26 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技