位置: 编程技术 - 正文

举例讲解Linux系统下Python调用系统Shell的方法(简单介绍linux系统有哪些主要特点?)

编辑:rootadmin

推荐整理分享举例讲解Linux系统下Python调用系统Shell的方法(简单介绍linux系统有哪些主要特点?),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux系统详解,简单介绍linux系统有哪些主要特点?,linux系统的基本概念,简述linux系统的组成,linux系统特点和基本操作方法,linux系统的基本概念,简述linux的系统结构,简单介绍linux系统有哪些主要特点?,内容如对您有帮助,希望把文章链接给更多的朋友!

时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法:1. os 模块

1.1. os模块的exec方法族Python的exec系统方法同Unix的exec系统调用是一致的。这些方法适用于在子进程中调用外部程序的情况,因为外部程序会替换当前进程的代码,不会返回。( 这个看了点 help(os) --> search "exec" 的相关介绍,但是没太搞明白咋使用)

1.2. os模块的system方法system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。

注意:上面说了,此方法脂肪会外部程序的结果,也就是os.system的结果,所以如果你想接收命令的返回值,接着向下看~

1.3. os模块的popen方法当需要得到外部程序的输出结果时,本方法非常有用,返回一个类文件对象,调用该对象的read()或readlines()方法可以读取输出内容。比如使用urllib调用Web API时,需要对得到的数据进行处理。os.popen(cmd) 要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd).read()

2. commands 模块

使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个类文件对象,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。主要方法: * commands.getstatusoutput(cmd) 返回(status, output)* commands.getoutput(cmd) 只返回输出结果* commands.getstatus(file) 返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法

3. subprocess模块

根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。>>> from subprocess import call >>> call(["ls", "-l"])

subprocess与system相比的优势是它更灵活(你可以得到标准输出,标准错误,“真正”的状态代码,更好的错误处理,等..)。我认为使用os.system已过时,或即将过时。

4. 众方法的比较以及总结4.1. 关于 os.system os.system("some_command with args")将命令以及参数传递给你的系统shell,这很好,因为你可以用这种方法同时运行多个命令并且可以设置管道以及输入输出重定向。比如:os.system("some_command < input_file | another_command > output_file")然而,虽然这很方便,但是你需要手动处理shell字符的转义,比如空格等。此外,这也只能让你运行简单的shell命令而且不能运行外部程序。

4.2. 关于os.popen使用stream = os.popen("some_command with args")也能做与os.system一样的事,与os.system不同的是os.popen会返回一个类文件对象,使用它来访问标准输入、输出。4.3. 关于subprocess.popensubprocess模块的Popen类,意图作为os.popen的替代,但是因为其很全面所以比os.popen要显得稍微复杂。比如你可以使用 print Popen("echo Hello World", stdout=PIPE, shell=True).stdout.read() 来替代 print os.popen("echo Hello World").read()。但是相比之下它使用一个统一的类包括4中不同的popen函数还是不错的。

4.4. 关于subprocess.callsubprocess模块的call函数。它基本上就像Popen类并都使用相同的参数,但是它只简单的等待命令完成并给你返回代码。比如:

os模块中还有C中那样的fork/exec/spawn函数,但是我不建议直接使用它们。subprocess可能更加适合你。

python和shell读取文件某一行

python和shell(awk命令) 可以实现直接读取文件的某一行,按行号进行读取 。并可以精准的取得该行的某个字段,这个有点类似于x轴、y轴定位某个点的操作。

举例讲解Linux系统下Python调用系统Shell的方法(简单介绍linux系统有哪些主要特点?)

一、awk取某行某列值

awk 可以设置条件来输出文件中m行到n行中每行的指定的k字段,使用格式如下:

m,n,k表示实在的数值。如果要用变量来表示m,n的值,则变量需要用单引号将其引起来。NR,{print }是awk命令在此用法下的规定字段;path/filename表示读取文件的路径及文件名。这里指定了两行,如果只指定一行,可以这样写:

二、python取某行某列

标准库提供的linecache模块提供具体取某一行的方法:

取到相关的行以后,再对theline做split切分成list,再对list索引取值就行了。如theline.split()[2] 。

三、linecache模块的用法

即然,提到了linecache模块,这里就列下linecache的其他方法。linecache模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。

linecache.getlines(filename) 从名为filename的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以linenum-1为元素在列表中的位置存储linecache.getline(filename,lineno) 从名为filename的文件中得到第lineno行。这个函数从不会抛出一个异常?产生错误时它将返回”(换行符将包含在找到的行里)。如果文件没有找到,这个函数将会在sys.path搜索。linecache.clearcache() 清除缓存。如果你不再需要先前从getline()中得到的行linecache.checkcache(filename) 检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。如果省略filename,将检查缓存里的所有条目。linecache.updatecache(filename) 更新文件名为filename的缓存。如果filename文件更新了,使用这个函数可以更新linecache.getlines(filename)返回的列表。示例:

1、获取a.txt文件的内容

2、获取a.txt文件中第1-4行的内容

3、获取a.txt文件中第4行的内容

注意:

使用linecache.getlines('a.txt')打开文件的内容之后,如果a.txt文件发生了改变,如你再次用linecache.getlines获取的内容,不是文件的最新内容,还是之前的内容,此时有两种方法:

1、使用linecache.checkcache(filename)来更新文件在硬盘上的缓存,然后在执行linecache.getlines('a.txt')就可以获取到a.txt的最新内容;

2、直接使用linecache.updatecache('a.txt'),即可获取最新的a.txt的最新内容。

读取文件之后你不需要使用文件的缓存时需要在最后清理一下缓存,使linecache.clearcache()清理缓存,释放缓存。

Python的Flask框架中SQLAlchemy使用时的乱码问题解决 一、问题这两天在学习使用flask+SQLAlchemy定制一个web查询页面的demo,在测试时,发现查询到的结果显示乱码。这里将解决方法记录下。二、解决思路1、fl

用Python的Flask框架结合MySQL写一个内存监控程序 这里以监控内存使用率为例,写的一个简单demo性程序,具体操作根据reboot提供的教程写如下。一、建库建表创建falcon数据库:mysqlcreatedatabasefalconcharact

Python实现模拟时钟代码推荐 Python实现模拟时钟代码推荐#coding=utf8importsys,pygame,math,randomfrompygame.localsimport*fromdatetimeimportdatetime,date,timedefprint_text(font,x,y,text,color=(,,)):imgtext=font.re

标签: 简单介绍linux系统有哪些主要特点?

本文链接地址:https://www.jiuchutong.com/biancheng/378560.html 转载请保留说明!

上一篇:使用Python导出Excel图表以及导出为图片的方法(python数据导出)

下一篇:Python的Flask框架中SQLAlchemy使用时的乱码问题解决(flask框架菜鸟教程)

  • 企业汇算清缴时允许税前扣除的工资是
  • 预收款交税规定
  • 未办理税务登记的个体户怎么注销营业执照
  • 增值税进项税额加计抵减政策
  • 社保滞纳金所得税汇算需要调增吗
  • 公司两年账没做
  • 收到增值税发票是进项还是销项
  • 农药增值税减免政策
  • 小规模纳税人涉税风险
  • 购买固定资产时的运费
  • 转让不动产增值税预缴
  • 小规模无票收入怎么做账
  • 个人开发者什么意思
  • 政府给的慰问金叫什么
  • 签了合同后又要收额外费用
  • 收到跨年的票据怎么做账
  • 已核销的贷款收回计入什么科目
  • 食堂购买食材明细表
  • 电子发票打印出来没有税务局的章
  • 出租房屋房产税怎么算
  • 增值税申报尾差怎么做账
  • 公积金是交当月还是上月
  • 支付车辆保险费及车船税会计科目
  • 收代扣代收代征手续费会计分录
  • 年增收节支总额与新增利税的关系
  • 刷单的费用计入劳务费吗
  • 现金支票工本费发票
  • 分期付款购买商品房后续没钱还怎么办
  • 小规模补缴增值税怎么算
  • 残疾人保障金怎么做账
  • 防伪税控设备丢失需要处罚吗
  • 代发工资开的发票可以抵扣吗?
  • 网络打印机找不到网络路径
  • linux中链接
  • PHP:oci_free_descriptor()的用法_Oracle函数
  • 其它应收款的内容
  • 劳务外包会计分录最新
  • 时域卷积图解法
  • 先开票后发货合法吗
  • 设备租赁费怎么入账
  • 发票开具使用要求
  • input输入框限制最大字数
  • 水利建设税根据什么申报
  • 专用发票超过360天未认证
  • 金蝶软件怎么录入发票号
  • sql server2005使用方法
  • 非财政补助结余分配属于什么科目
  • 广告赞助支出能抵扣吗
  • 预收账款是什么要素
  • 应交税费未交增值税借方表示什么
  • 暂估商品入库 后收到发票怎么做分录
  • 个人应如何进行社会实践
  • 本年利润在
  • 分支机构与总机构怎么纳税?
  • 应交个人所得税借方余额表示什么
  • 个体工商户免征增值税政策
  • 应当设置会计机构的单位有
  • sqlserver查询所有表的行数
  • centos下安装虚拟机
  • Windows 10 与 MySQL 5.5 安装使用及免安装使用详细教程(图文)
  • SQLServer XML查询快速入门(18句话)
  • FreeBSD下zfs: failed with error 6错误如何解决?
  • 如何关闭京东白条
  • 获取mac命令
  • redhat linux6.5安装教程
  • windows7怎
  • centos停止程序
  • reg.exec
  • centos6可用yum源
  • pdv是什么格式文件
  • win7系统怎么连接wifi
  • 雷柏7100p怎么样
  • js动态表格可修改表格数据
  • python多核并行处理
  • unity smooth
  • node.js+captchapng+jsonwebtoken实现登录验证示例
  • 怎么连接w乚an
  • jQuery插件封装时如要实现链式编程,需要
  • 国税系统公务员政审父母超生合格吗
  • 重庆税务电子发票登录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设