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启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
Apr 09 Python
python从sqlite读取并显示数据的方法
May 08 Python
用Python计算三角函数之acos()方法的使用
May 15 Python
Mac 上切换Python多版本
Jun 17 Python
python简单商城购物车实例代码
Mar 15 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
全面了解django的缓存机制及使用方法
Jul 22 Python
python中shell执行知识点
May 06 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
python根据字典的键来删除元素的方法
Aug 16 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
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
Python魔术方法详解
2015/02/14 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python爬虫运用正则表达式的方法和优缺点
2019/08/25 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
如何通过python计算圆周率PI
2020/11/11 Python
Python使用Pygame绘制时钟
2020/11/29 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
人事助理岗位职责
2013/11/18 职场文书
员工年终演讲稿
2014/01/03 职场文书
国家励志奖学金获奖感言
2014/01/09 职场文书
开学第一周值周总结
2015/07/16 职场文书
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android