【Python】执行系统命令的常见用法

简介:
本文总结了使用Python 程序执行系统的几种命令,介绍各个模块的优缺点。
os.system模块

仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息,如果在命令行下执行,结果直接打印出来


Python 2.6.6 (r266:84292, May 29 2014, 05:49:27) 
 
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> os.system('cat cont')

biz_order_id

out_order_id

buy_nick

sel_nick

buyer

sel

0

>>> out=os.system('cat cont')

biz_order_id

out_order_id

buy_nick

sel_nick

buyer

sel

>>> 

缺点: 
a.os.system() 是新起一个shell执行命令 
b.不能利用其它变量存放os.system()执行的结果,获得输出等信息比较麻烦.
c.无法控制命令执行的状态,(如果调用的外部命令,挂死或者执行时间很长),主进程无法控制os.system(), 因为调用os.system(cmd) 调用进程会block,直到 os.system()命令结束自己退出。 

os.popen模块
通过 os.popen() 返回的是 file read 的对象,对其进行读取 read() 的操作可以看到执行的输出。
例子1


>>> output = os.popen('date')
 
>>> print output

<open file 'date', mode 'r' at 0x7f7ae831e150>

>>> print output.read()

Sun Sep 13 22:34:56 CST 2015 

例子2


>>> output = os.popen('cat cont').readlines() ##返回一个数组
 
>>> print output

['biz_order_id\n', 'out_order_id\n', 'buy_nick\n', 'sel_nick\n', 'buyer\n', 'sel\n']

>>> print output[0]

biz_order_id 

优点
1 该方法不但执行命令还返回执行后的信息对象,将返回的结果赋于一变量,便于程序的处理。
缺点
1 无法获取命令的执行结果的状态。

commands模块
和os.system的执行方式类似,在子系统终端执行命令。该模块包含如下三种函数:
commands.getstatusoutput(cmd)
commands.getoutput(cmd) 返回命令的执行结果
commands.getstatus(file) 返回 ls -ld file 的执行结果。


>>> output=commands.getoutput("date")
 
>>> print output

Sun Sep 13 22:37:44 CST 2015

>>> status=commands.getstatus("date")

>>> print status

ls: cannot access date: No such file or directory

>>> commands.getstatus('/bin/ls')

'-rwxr-xr-x 1 root root 111744 May 29 2014 /bin/ls'

>>> st=commands.getstatus('/bin/ls')

>>> print st

-rwxr-xr-x 1 root root 111744 May 29 2014 /bin/ls

>>> status,output=commands.getstatusoutput("ls yy") 

>>> print status,output

512 ls: cannot access yy: No such file or directory 

优点: 
a.容易获得外部命令的结果输出和命令执行的状态 
缺点: 
b.不能利用其它变量存放os.system()执行的结果,获得输出等信息比较麻烦.
c.无法控制命令执行的状态,(如果调用的外部命令,挂死或者执行时间很长),主进程无法控制os.system(), 因为调用os.system(cmd) 调用进程会block,直到 os.system()命令结束自己退出。 
需要注意事的是 该模块已经在 python 3 中被废弃了,推荐使用 subprocess代替。

subprocess 模块
运行python的时候,我们都是在创建并运行一个进程。像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序。在Python中,通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序。详细资料请参考 官方文档



>>> import subprocess
 
>>> subprocess.call(["ls", "-l"])

total 20

-rwxr-xr-x 1 qilong.yangql users 14 Dec 30 2014 a

-rw-r--r-- 1 qilong.yangql users 54 Sep 13 22:22 cont

-rwxr-xr-x 1 root root 19 Jun 1 11:01 d

-rw-r--r-- 1 root root 68 Jul 7 09:45 database

drwxr-xr-x 3 qilong.yangql users 4096 Jan 11 2015 dbscripts

0

>>> subprocess.call(["ls"]) 

a cont d database dbscripts

0

>>> Popen = subprocess.Popen(["date"])

>>> Sun Sep 13 22:57:08 CST 2015

>>> Popen.pid 

优点
1 支持和子进程交互 
2 支持命令结果输出
3 可以使用kill()  ,terminate() 来控制子进程退出 
4 还有很多请参考官方文档。


相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
165 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
3月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
386 55
|
2月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
18天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
75 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
3月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
137 66
|
2月前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
68 20
|
8天前
|
存储 算法 量子技术
解锁文档管理系统高效检索奥秘:Python 哈希表算法探究
在数字化时代,文档管理系统犹如知识宝库,支撑各行各业高效运转。哈希表作为核心数据结构,通过哈希函数将数据映射为固定长度的哈希值,实现快速查找与定位。本文聚焦哈希表在文档管理中的应用,以Python代码示例展示其高效检索特性,并探讨哈希冲突解决策略,助力构建智能化文档管理系统。
|
3月前
|
分布式计算 MaxCompute 对象存储
|
2月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
81 12
|
2月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习果蔬识别系统实现
本项目基于Python和TensorFlow,使用ResNet卷积神经网络模型,对12种常见果蔬(如土豆、苹果等)的图像数据集进行训练,构建了一个高精度的果蔬识别系统。系统通过Django框架搭建Web端可视化界面,用户可上传图片并自动识别果蔬种类。该项目旨在提高农业生产效率,广泛应用于食品安全、智能农业等领域。CNN凭借其强大的特征提取能力,在图像分类任务中表现出色,为实现高效的自动化果蔬识别提供了技术支持。
基于Python深度学习果蔬识别系统实现

热门文章

最新文章