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使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
python获取各操作系统硬件信息的方法
Jun 03 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
python matlibplot绘制多条曲线图
Feb 19 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
Python如何把十进制数转换成ip地址
May 25 Python
Python小白垃圾回收机制入门
Jun 09 Python
解决tensorflow/keras时出现数组维度不匹配问题
Jun 29 Python
python中字符串的编码与解码详析
Dec 03 Python
python用字节处理文件实例讲解
Apr 13 Python
Jupyter notebook 更改文件打开的默认路径操作
May 21 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生成UTF8文件的方法
2010/05/15 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
解析wamp5下虚拟机配置文档
2013/06/27 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
jquery实现拖拽调整Div大小
2015/01/30 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[00:33]DOTA2上海特级锦标赛 CDEC战队宣传片
2016/03/04 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
python调用shell的方法
2013/11/20 Python
python3 pillow生成简单验证码图片的示例
2017/09/19 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
ipython和python区别详解
2019/06/26 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Python API len函数操作过程解析
2020/03/05 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
CSS3 实现侧边栏展开收起动画
2014/12/22 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
EJB timer的种类
2014/10/28 面试题
自动化职业生涯规划书范文
2014/01/03 职场文书
颐和园英文导游词
2015/01/30 职场文书
邀请函样本
2015/02/02 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
医者仁心观后感
2015/06/17 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
table不让td文字溢出操作方法
2022/12/24 HTML / CSS