python调用shell命令-用Python调用Shell命令
Python经常被称作“胶水语言”,因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令。
用Python调用Shell命令有如下几种方式:
第一种:os.system
os.system("The command you want").
这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以windows和linux是不一样的。
第二种:os.popen
os.popen(command[,mode[,bufsize]])
先给大家看个例子
可以看出,popen方法通过p.read()获取终端输出,而且popen需要关闭close().当执行成功时,close()不返回任何值,失败时,close()返回系统返回值. 可见它获取返回值的方式和os.system不同。
第三种,使用commands ( python3失效)
根据你需要的不同,commands模块有三个方法可供选择。getstatusoutput, getoutput, getstatus。
commands.getstatusoutput(cmd) 返回(status, output).
commands.getoutput(cmd) 只返回输出结果
commands.getstatus(file) 返回ls-ld file的执行结果字符串,调用了getoutput,不建议使用此方法
但是,如上三个方法都不是Python推荐的方法,而且在Python3中其中两个已经消失。
第四种,subprocess《Python文档中目前全力推荐》
subprocess使用起来同样简单:
直接调用命令,返回值即是系统返回。shell=True表示命令最终在shell中运行。Python文档中出于安全考虑,不建议使用shell=True。建议使用Python库来代替shell命令,或使用pipe的一些功能做一些转义。官方的出发点是好的,不过真心麻烦了很多, so....
但是,我使用subprocess失败了
>>> importsubprocess>>> 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"", line 1, in File"/usr/lib64/python3.6/subprocess.py", line 287, incall
with 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_childraisechild_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno2] 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 去运行,也确实产生了。。好奇
>>> importos>>> os.system("cat %s |grep %s > %s" % ("/home/www/running/os-app-api/nohup.out","2019-10-28","~/nohup-2019-10-28.out"))256
源码研究:
这里面最为重要的几个参数是:.
args:要执行的shell命令,或者是命令的列表;
bufsize:缓冲区大小;。
stdin、stdout、stderr:表示程序的标准输入、标准输出以及错误输出。
shell:是否直接执行命令,如果设置为True就表示可以直接执行;
cwd:当前的工作目录;
env:子进程环境变量;
案例:
subprocess模块里面还有一项功能比较强大的支持在于可以直接使用标准输入、标准输出和错误输出进行进程的数据通讯操作。
例如,在Python安装完成之后都会存在有交互式的编程环境,那么本次将通过程序调用交互式编程环境。
直接操作python命令行,在python命令行中直接输入程序。
defmain():
subp_popen=subprocess.Popen("python.exe",stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
subp_popen.stdin.write("print('subp_popen.stdin.write1') ".encode())
subp_popen.stdin.write("print('subp_popen.stdin.write2') ".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()
结果:
python调用shell命令-用Python调用Shell命令相关推荐
- Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)—命令提示符cmd的几种方法
Python语言学习:利用python语言实现调用内部命令(python调用Shell脚本)-命令提示符cmd的几种方法 目录 利用python语言实现调用内部命令-命令提示符cmd的几种方法 T1. ...
- shell调用python函数 参数 返回_Python之系统shell交互(subprocess)
subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回(状态)码.这个模块的目的在于替换几个旧的模 ...
- shell调用python获取返回值_[linux的shell脚本调用python脚本的返回值][shell调python][ubuntu的shell调用python脚本得到返回值]...
最近搞个东西,需要写shell脚本,但在shell脚本里需要调用python并得到变量值,网上找了很多都是python调shell的,最后请教了一下郭总 知道了sys.argv的用法后才搞定了,在此感 ...
- python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解
前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...
- python commands执行不连续_[Python] 利用commands模块执行Linux shell命令
用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要 ...
- python解压7z文件_Python调用7zip命令实现文件批量解压
Python调用7zip命令实现文件批量解压 1.输入压缩文件所在的路径 2.可以在代码中修改解压到的文件路径和所需要解压的类型,列入,解压文件夹下面所有的mp4格式的文件 3.cmd 指的就是Pyt ...
- linux命令封装sh,shell脚本学习之调用脚本将文件打包zip的方法示例
前言 本文主要给大家介绍的是关于调用脚本将文件打包zip的相关资料,分享出来供大家参考学习,下面来一起看看详细的介绍: 最近刚刚接触shell脚本,写了一点简单的练手.这里是用python调用脚本执行 ...
- Vim命令行模式调用shell命令方式(笔记)
本文为阅读vim实用技巧时的一部分笔记 在vim中操作时,我们能很方便德调用shell命令.下面选取了最有用的一些调用外部命令的方式: :shell:启动一个shell(输入exit返回vim) :! ...
- perl脚本执行linux命令行,Perl调用shell命令方法小结
一.system perl也可以用system调用shell的命令,它和awk的system一样,返回值也是它调用的命令的退出状态. 代码如下: [root@AX3sp2 ~]# cat aa.pl ...
- linux常用命令及其python调用
文件及文件夹夹操作 以下path指路径名称,filename指文件名,-args指可用多种参数 文件夹操作 linux命令 作用 python调用 pwd 展示当前路径 cd path 切换文件夹 l ...
最新文章
- 人工智能 MIT 博士系列讲课
- 解决Springboot+JPA中多表关联查询会查询多次的问题(n+1查询问题)
- python类介绍说明_python 中类
- IDEA常用设置【很实用】
- solr基本查询和高级查询
- 18.linux日志收集数据到hdfs上面
- netty应用场景_彻底搞懂 netty 线程模型
- C++ 数组与指针详解之终极无惑
- python编程语言-为什么我不建议你将python作为入门编程语言
- 最大数组全局还是局部的问题
- VB编程必备!_VB源码之友(内含-下载-破解-使用方法)
- linux的文件系统是采用,Linux文件系统
- 缺少对公共可见类型或成员的XML注释
- ARM 汇编指令 MRS用法
- 《老路用得上的商学课》1-15学习笔记
- (2022.5.27)【Win10】Windows10重置后微软商店闪退打不开、图片闪退打不开、UWP应用闪退打不开——可能的解决方案
- int temp java,temp是什么意思
- 推荐几款软件界面模型设计工具
- php 均匀随机算法,PHP算法学习(4) 随机算法
- 4. hda设备中的pcm文件(第二部分)
热门文章
- 给vim添加自动跳出括号的功能
- malloc和new出来的地址都是虚拟地址 你就说内存管理单元怎么可能让你直接操作硬件内存地址!...
- MongoDB 3.0 WiredTiger Compression and Performance
- centos7 docker 安装 otter 注意事项
- 花神游历各国 题解(小清新线段树/树状数组+并查集)
- 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...
- 学习笔记整理之对象的转型
- SQL盲注之时间注入
- Git环境搭建与基本使用方法
- SQL语言 之 数据查询