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 域名分析工具实现代码
Jul 15 Python
python 中文字符串的处理实现代码
Oct 25 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
tensorboard显示空白的解决
Feb 15 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
Python图片验证码降噪和8邻域降噪
Aug 30 Python
Python可变与不可变数据和深拷贝与浅拷贝
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数组操作汇总 php数组的使用技巧
2011/07/17 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
2014/08/28 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
破解Session cookie的方法
2006/07/28 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
详解Angular5 服务端渲染实战
2018/01/04 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
详解基于 Node.js 的轻量级云函数功能实现
2019/07/08 Javascript
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
Python 正则表达式实现计算器功能
2017/04/29 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
Python将字符串常量转化为变量方法总结
2019/03/17 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
python的flask框架难学吗
2020/07/31 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
教师自荐信
2013/12/10 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
销售顾问岗位职责
2014/02/25 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
租房协议书范文
2014/08/20 职场文书
国际贸易实务实训报告
2014/11/05 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
南湾猴岛导游词
2015/02/09 职场文书
解除合同协议书范本
2016/03/21 职场文书
React中的Context应用场景分析
2021/06/11 Javascript