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实现Windows定时关机功能
Mar 21 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
python九九乘法表的实例
Sep 26 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
Python自定义一个异常类的方法
Jun 27 Python
python 梯度法求解函数极值的实例
Jul 10 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
如何搭建pytorch环境的方法步骤
May 06 Python
python 利用Pyinstaller打包Web项目
Oct 23 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
javascript 框架小结 个人工作经验
2009/06/13 Javascript
javascript中常用编程知识
2013/04/08 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
浅谈python 导入模块和解决文件句柄找不到问题
2018/12/15 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
2014物价局民主生活会对照检查材料思想汇报
2014/09/24 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
用Python selenium实现淘宝抢单机器人
2021/06/18 Python
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫