位置: 编程技术 - 正文

举例讲解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框架菜鸟教程)

  • 所得税费用影响企业利润总额吗
  • 企业汇算清缴时允许税前扣除的工资是
  • 结转和结转到的区别
  • 2021年销售农机免增值税吗
  • 以前未入账固定资产补入账涉及的房产税
  • 实收资本可以做借方吗
  • 营业外收入缴纳税款
  • 净现值率和现值指数之间的关系
  • 会计集中核算模式
  • 在建工程有应交税费吗
  • 成品油进项税转出
  • 原始凭证审核的内容
  • 建筑业发票可以在备注里加备注么
  • 企业房产税如何申报缴纳
  • 公司领用自产产品建设厂房包括销项税
  • 理财产品取得收益要交税吗
  • 所得税新规定
  • 上年度所得税费用又退回来了,如何做账
  • 税前金额是不含税金额
  • 跨省经营如何缴纳流转税?
  • Linux如何给文件赋予内容
  • 电脑添加小工具
  • macbookair重制系统
  • windows10如何清理磁盘碎片
  • 录制权限怎么打开
  • 辅导期内的企业有哪些
  • 无票收入什么时候确认收入
  • 包装物逾期是什么意思
  • 进口增值税采集
  • 索尔兹伯里评价
  • php模板引擎类
  • Windows下php+mysql5.7配置教程
  • echarts series name
  • ai训练流程
  • FPN细节剖析以及pytorch代码实现
  • 嵌套循环语句
  • 用php制作年历
  • python中的sum函数怎么用
  • 每个公司都要交房产税吗
  • phpcms api
  • 企业资本包括
  • 保险经纪公司要提取风险准备金按什么规定
  • 供热管道属于什么结构类型
  • 年度财务报表怎么作废
  • 医疗服务增值税税率
  • 固定资产折旧的影响因素
  • 地方水利建设基金减免政策2023
  • 所得税调增调减技巧
  • 全资子公司的利润怎么记录母公司报表
  • 银行存款一直没有记账怎么调整
  • 应收票据的核算范围包括
  • 记账凭证应该是
  • 不动产分期抵扣表数据
  • 向法人借款凭证摘要怎么写
  • 外汇账户开立成功后,开户行应于
  • mysql日期和时间函数
  • win10系统崩溃后可以通过什么来恢复
  • u盘安装win7视频教程
  • 电脑dbs是什么
  • winxp程序和功能在哪里
  • WIN10系统摄像头在哪打开
  • win8系统如何关机
  • 保证windows 7安装后正常使用的安装方法
  • js原生实现ajax
  • javascript entries
  • python中字典怎么用
  • python开发软件教程
  • 收集linux日志
  • 整型python
  • 安卓 截图
  • js打印命令
  • python socket connect
  • python 转换为字符
  • jquery遍历对象使用的方法
  • XRegExp 0.2: Now With Named Capture
  • 什么情况下税务局会罚款
  • 人力资源差额发票
  • 国家税务总局咨询热线电话
  • 苏州税务中心
  • 形容有待完善的词语
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设