Python调用Shell命令 (python, shell 混合编程)

嗨喽,大家好呀~这里是爱看美女的茜茜呐

Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令。

用Python调用Shell命令有如下几种方式:

1. os.system
os.system("The command you want").
os.system("lscpu").os.system("ls -al").

这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的。


👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可


2. os.popen
os.popen(command[,mode[,bufsize]])

可以看出,popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败时,close()返回系统返回值. 可见它获取返回值的方式和os.system不同。

3. 使用commands ( python3失效)

根据你需要的不同,commands模块有三个方法可供选择。getstatusoutput, getoutput, getstatus。

commands.getstatusoutput(cmd) #返回(status, output).
commands.getoutput(cmd) #只返回输出结果
commands.getstatus(file) #返回ls -ld file的执行结果字符串,调用了getoutput,不建议使用此方法

但是,如上三个方法都不是Python推荐的方法,而且在Python3中其中两个已经消失。

4. subprocess《Python文档中目前全力推荐》

subprocess使用起来同样简单:

直接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。

Python文档中出于安全考虑,不建议使用shell=True。

建议使用Python库来代替shell命令,或使用pipe的一些功能做一些转义。

官方的出发点是好的,不过真心麻烦了很多, so…

但是,我使用subprocess失败了

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
>>> import subprocess
>>> subprocess.call("cat %s |grep %s > %s " % ("/home/www/running/os-app-api/nohup.out","2019-10-28","~/nohup-2019-10-28.out"))
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib64/python3.6/subprocess.py", line 287, in callwith Popen(*popenargs, **kwargs) as p:File "/usr/lib64/python3.6/subprocess.py", line 729, in __init__restore_signals, start_new_session)File "/usr/lib64/python3.6/subprocess.py", line 1364, in _execute_childraise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'cat /home/www/running/os-app-api/nohup.out |grep 2019-10-28 > ~/nohup-2019-10-28.out ': 'cat /home/www/running/os-app-api/nohup.out |grep 2019-10-28 > ~/nohup-2019-10-28.out '

但是,可以直接运行在shell里面:

同样的 我用os.system 去运行,也确实产生了。

>>> import os
>>> os.system("cat %s |grep %s > %s " % ("/home/www/running/os-app-api/nohup.out","2019-10-28","~/nohup-2019-10-28.out"))256

源码研究:

这里面最为重要的几个参数是:.

  1. args:要执行的shell命令,或者是命令的列表;

  2. bufsize:缓冲区大小;。

  3. stdin、stdout、stderr:表示程序的标准输入、标准输出以及错误输出。

  4. shell:是否直接执行命令,如果设置为True就表示可以直接执行;

  5. cwd:当前的工作目录;

  6. env:子进程环境变量;

subprocess模块里面还有一项功能比较强大的支持在于可以直接使用标准输入、标准输出和错误输出进行进程的数据通讯操作。

例如,在Python安装完成之后都会存在有交互式的编程环境,那么本次将通过程序调用交互式编程环境直接操作python命令行,在python命令行中直接输入程序。

'''
python资料获取看这里噢!! 小编 V:Pytho8987(记得好友验证备注:6 否则可能不通过)
即可获取:文章源码/教程/资料/解答等福利,还有不错的视频学习教程和PDF电子书!
'''
def main():subp_popen=subprocess.Popen("python.exe",stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)subp_popen.stdin.write("print('subp_popen.stdin.write1')\n".encode())subp_popen.stdin.write("print('subp_popen.stdin.write2')\n".encode())subp_popen.stdin.write(("print('subp_popen.stdin.write3'+1)").encode())subp_popen.stdin.close()cmd_out=subp_popen.stdout.read()subp_popen.stdout.close()print(cmd_out.decode())cmd_err=subp_popen.stderr.read()subp_popen.stderr.close()print(cmd_err)if __name__ == '__main__':main()

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/341159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VLAN 详解二(VLAN 基础配置)

VLAN 详解二&#xff08;VLAN 基础配置&#xff09; VLAN 配置其实是非常简单的&#xff0c;但是想要学得比较精还是需要花费一些功夫的&#xff0c;根据不同的 VLAN 划分方式用不同的配置方法&#xff0c;但其实配置方法基本上都大同小异。 下面就以在实际网络中最常用的基于…

Vercel配置自定义域名

首先你需要有一个域名 1.点击部署的项目设置 2.找到Domains 3.输入自己的域名 点击添加之后按要求去域名服务商添加解析即可 4.显示下面内容就设置完成了&#xff0c;

香港Web3:Web3的新热土

相关推荐点击查看TechubNews 随着区块链技术的快速发展&#xff0c;Web3的概念逐渐在全球范围内受到关注。作为亚洲的金融中心&#xff0c;香港在Web3领域也展现出了极大的热情和潜力。本文将探讨香港在Web3领域的发展现状、机遇与挑战。 一、香港Web3的发展现状 香港在Web3…

【Web】CTFSHOW PHP命令执行刷题记录(全)

目录 web29 web30 web31 web32 web33 web34 web35 web36 web37-39 web40 web41 &#xff08;y4✌脚本&#xff09; web42 -44 web45 web46 -49 web50 web51 web52 web53 web54 web55-56 web57 web58 web59 web60 web61 web62 web63-65 web66-67 w…

鹅目标检测数据集VOC格式300张

鹅&#xff0c;一种家禽&#xff0c;以其独特的形态、生活习性和文化象征意义而备受人们喜爱。 鹅属于鸟纲、雁形目、鸭科&#xff0c;是一种大型水禽。它们的身体肥胖&#xff0c;羽毛洁白如雪&#xff0c;嘴部扁平且坚硬&#xff0c;脚部有蹼&#xff0c;适合在水中游动。 …

InnoDB引擎

一、逻辑存储结构 ① 表空间&#xff08;ibd文件&#xff09;&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;用于存储记录、索引等数据。 ② 段&#xff0c;分为数据段&#xff08;Leaf node segment&#xff09;、索引段&#xff08;Non-leaf node segment&#x…

API电商如何进行数据采集汇总分析

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

报名倒计时 | Atlassian 社区日·上海站:与澳大利亚商务领事一起探索澳大利亚的创新力量

1月20日&#xff08;下周六&#xff09;&#xff0c;我们即将在上海迎来一场别开生面的 Atlassian 社区线下活动&#xff0c;我们非常荣幸地邀请到了 Austrade&#xff08;澳大利亚总领事馆商务处&#xff09;的商务领事——Lauren Gilbert&#xff0c;劳伦女士此次将为大家带来…

Cesium 模型开挖

和模型压平类似&#xff0c;此处开挖也是采用修改了模型的顶点&#xff0c;通过判断定的位置来判断改顶点是否加载。 缺点&#xff1a;会有毛边。 后续我会再上个修改源码无毛边的版本。 // 三维模型裁剪 class TilesetCut {constructor(tileset, opt) {if (!tileset) {consol…

人工智能推动供应链革命的成功

人工智能推动供应链革命的成功 目录 人工智能推动供应链革命的成功一、供应链管理不断变化的面貌二、拥挤的解决方案景观三、踏上人工智能驱动的转型1. 价值创造识别、战略和路线图2. 目标解决方案设计和供应商选择3. 实施与系统集成4. 变革管理、能力建设和全面价值获取 新技术…

缺陷检测设备可以用于检测各种类型的缺陷,包括裂纹、气泡、疏松、异物、变形等

缺陷检测设备是用于检测产品或材料缺陷的工具。这些设备可以用于检测各种类型的缺陷&#xff0c;包括裂纹、气泡、疏松、异物、变形等。常见的缺陷检测设备包括X射线检测设备、超声波检测设备、磁粉检测设备、红外检测设备等。这些设备可以帮助生产厂家在生产过程中及时发现并修…

NPN PNP SS8050 SS8550 S8050

SS8050的使用及引脚判断方法 今天讲的是NPN型三极管SS8050&#xff0c;主要分为以下几个方面&#xff1a; 一、前言 二、SS8050简介 三、NPN三极管与PNP三极管 四、三极管管脚识别方法 五、不拆卸三极管判断其好坏 六、S8050和SS8050的区别 七、三极管与MOS管的区别 八…