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 open读写文件实现脚本
Sep 06 Python
使用Python的Twisted框架实现一个简单的服务器
Apr 16 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
numpy排序与集合运算用法示例
Dec 15 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
选择python进行数据分析的理由和优势
Jun 25 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
如何基于python测量代码运行时间
Dec 25 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 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
PHP4 与 MySQL 交互使用
2006/10/09 PHP
PHP实现图片压缩的两则实例
2014/07/19 PHP
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
浅谈JavaScript中的对象及Promise对象的实现
2015/11/15 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
Javascript 实现全屏滚动实例代码
2016/12/31 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
简述vue中的config配置
2018/01/23 Javascript
JavaScript常用工具方法封装
2019/02/12 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
浅入深出Vue之自动化路由
2019/08/06 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
2020/10/29 Javascript
[07:37]DOTA2-DPC中国联赛2月2日Recap集锦
2021/03/11 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
python使用Matplotlib画条形图
2020/03/25 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
威盛公司软件C++工程师笔试题面试题
2012/07/16 面试题
小学学雷锋活动总结
2014/04/25 职场文书
大学活动总结模板
2014/07/10 职场文书
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android