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')\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()
结果:
python 执行shell_用Python调用Shell命令相关推荐
- python 执行shell_从python执行Shell脚本与变量
我有这个代码: opts.info("Started domain %s (id=%d)" % (dom,domid)) 我想从上面执行一个带有参数domid的shell脚本. 这 ...
- python调用shell命令-在Python中执行shell命令的6种方法,你都知道吗?
原标题:在Python中执行shell命令的6种方法,你都知道吗? Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库.今天我们就讲解 ...
- python调用shell命令-「Python」6种python中执行shell命令方法
用Python调用Shell命令有如下几种方式: 第一种: os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等 ...
- python 调用shell命令的方法
转载: https://www.cnblogs.com/thinker-lj/p/3860123.html https://www.cnblogs.com/wenwangt/p/4897961.htm ...
- python调用shell命令-Python调用shell命令常用方法(4种)
方法一.使用os模块的system方法:os.system(cmd),其返回值是shell指令运行后返回的状态码,int类型,0表示shell指令成功执行,256表示未找到,该方法适用于shell命令 ...
- python调用shell命令-用Python调用Shell命令
Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库,也当然可以用Python调用Shell命令. 用Python调用Shell命令有如 ...
- python 中调用shell命令
subprocess模块 根据Python官方文档说明,subprocess模块用于取代上面这些模块.有一个用Python实现的并行ssh工具-mssh,代码很简短,不过很有意思,它在线程中调用sub ...
- python使用shell命令_python 调用shell命令的方法
在python程序中调用shell命令,是件很酷且常用的事情-- 1. os.system(command) 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出 ...
- python调用shell命令
在python程序中调用shell命令 1. os.system(command) 此函数会启动子进程,在子进程中执行command,并返回command命令执行完毕后的退出状态,如果command有 ...
最新文章
- 谁是 2020 年最强 Python 库?年度 Top10 出炉
- jquery控制只监听数字_无源!模拟!颜值高!简单实用!TC Level Pilot监听音量控制器...
- 深入理解 Laravel Eloquent(三)——模型间关系(关联)
- yii2 后台权限验证获取用户身份_前、后端分离权限控制设计与实现
- dve 二维数组信号 显示波形_函数任意波形发生器价格
- Kali Linux Aircrack-ng简单破解WEP加密方式网络
- 5.6 前端开发日报
- ORA-16019: cannot use LOG_ARCHIVE_DEST_1 解决方法
- Python学习笔记之Windows下通过pip安装PyMySQL
- 【转摘】芯片的本质是什么
- 笔记本键盘失灵怎么办? 笔记本电脑按键失灵的一般解决办法
- 无盘 电影服务器,网吧电影服务器解决方案完全攻略指南
- 下一个时代的黑产攻防,可能没有人类什么事情了
- 浏览器的收藏夹在哪里打开
- 微信小程序 全局数据共享 Mobx
- 原码、反码、补码、移码 基本介绍
- IOS性能检测工具-Instruments
- 远程访问堡垒机_如何远程控制堡垒机
- Photoshop零基础教程集锦,助你快速进阶为大佬,轻松、任性!!!
- 关于信噪比与向已知信号添加噪声的整理及个人心得
热门文章
- RSA用私钥加密数据公钥解密数据(不是签名验证过程)
- ckc交易什么意思_股票熔断是什么意思啊?熔断机制对股民的影响有那些
- 使用docker快速体验OceanBase(Win10 Home)
- vue-cli 项目打包后 代理接口报404错误 解决办法!
- windows防火墙设置_详解关闭Windows防火墙操作技巧,让你彻底断开与外网的连接...
- 苹果备份与恢复_手机照片误删了怎么恢复?不得不说的好方法
- Java总结之基础篇
- red hat linux 9下载地址,Red Hat Linux 9.0 ISO下载 (转)
- Ubuntu 18.04 登录界面鼠标键盘鼠标失灵解决方法
- 基于https搭建habor私有库