使用python执行shell脚本 并动态传参 及subprocess的使用详解


Posted in Python onMarch 06, 2020

最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数

执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库

subprocess这个模块可以非常方便的启动一个子进程,并且控制其输入和输出

Class Popen(args,bufsize = 0,executable=None,
  stdin =None,stdout =None,stderr =None,
  preexec_fn = None,close_fds = False,shell = False,
  cwd = None,env = None,universal_newlines = False,
  startupinfo = None,creationflags = 0):

参数是:

args 应该是一个字符串,或一系列程序参数。要执行的程序通常是args序列或字符串中的第一项,但可以使用可执行参数进行显式设置。

在UNIX上,与shell=False(默认):在这种情况下,POPEN 类使用os.execvp()来执行子程序。 args通常应该是一个序列。一个字符串将被视为一个字符串作为唯一项目(要执行的程序)的序列。

在UNIX上,使用shell = True:如果args是一个字符串,则它指定要通过shell执行的命令字符串。如果args是一个序列,则第一个项目指定命令字符串,并且任何其他项目将被视为附加的shell参数。

可以先创建一个简单的shell脚本 a.sh

$1 $2 分别代表传进脚本的 第一个和第二个参数

使用python执行shell脚本 并动态传参 及subprocess的使用详解

使用python执行shell脚本 并动态传参 及subprocess的使用详解

如果不写shell=True,默认为shell=False,需要在args的第一个参数指定执行器路径

使用python执行shell脚本 并动态传参 及subprocess的使用详解

bufsize 如果给出,bufsize与内建的open()函数的相应参数具有相同的含义:0表示无缓冲,1表示行缓冲,任何其他正值意味着使用(大约)该大小的缓冲区。负bufsize意味着使用系统默认值,通常意味着完全缓冲。bufsize的默认值是0(无缓冲)。

stdin,stdout和stderr分别指定执行的程序的标准输入,标准输出和标准错误文件句柄。有效值是PIPE,现有文件描述符(正整数),现有文件对象和 None。 PIPE表示应该创建一个新的管道给孩子。随着无,则不会发生重定向; 孩子的文件句柄将从父类继承。另外,stderr 可以是STDOUT,它表示应用程序的stderr数据应该被捕获到与stdout相同的文件句柄中。

在Popen对象中,可以设值subprocess.stdout=PIPE 即通过管道 p.stdout.read()取出 该进程的标准输出

preexec_fn 如果将preexec_fn设置为可调用对象,则该对象将在子进程执行前被调用。

如果close_fds为true,则在执行子进程之前,将关闭除0,1和2之外的所有文件描述符。

如果shell为true,则指定的命令将通过shell执行。

如果cwd不是None,那么在执行子代之前,当前目录将更改为cwd。

如果env不是None,它将为新进程定义环境变量。

如果设置universal_newlines为true,则文件对象stdout和stderr将作为文本文件打开,但可能会有\ n,Unix行尾约定\ r,Macintosh约定或\ r \ n中的任何行终止, Windows约定。所有这些外部表示被Python程序视为\ n。注意:此功能仅在Python是使用通用换行支持(默认)构建时才可用。此外,文件对象stdout,stdin和stderr的newlines属性不会被communications()方法更新。

如果设置了STARTUPINFO和creationflags,将被传递到下层的CreateProcess()函数。他们可以指定诸如主窗口的外观和新过程的优先级等内容。(仅限Windows)

Popen对象的一些方法

Popen.poll() 检查子进程是否终止,返回对象的returncode

Popen.wait() 等待子进程完成,阻塞。返回returncode

Popen.communicate(input=None) 将信息输入到进程,从stdout和stderr中读取数据,直到达到文件结尾。等待进程终止。可选的stdin参数应该是要发送到子进程的字符串,如果没有数据应发送给子进程,则为None。

返回一个元组(stdout,stderr) 但是读取的数据缓存在内存中,所以如果数据量很大或者无限,就不要使用这种方法

Popen.pid 返回子进程的pid

Popen.returncode 读取进程的状态码

None —— 子进程尚未结束;
==0 —— 子进程正常退出;
> 0—— 子进程异常退出,returncode对应于出错码;
< 0—— 子进程被信号杀掉了。

Popen.kill() 杀死进程

以上这篇使用python执行shell脚本 并动态传参 及subprocess的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在漏洞利用Python代码真的很爽
Aug 26 Python
python实现中文分词FMM算法实例
Jul 10 Python
python中import reload __import__的区别详解
Oct 16 Python
Python 函数基础知识汇总
Mar 09 Python
Python编写一个优美的下载器
Apr 15 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
简单了解python高阶函数map/reduce
Jun 28 Python
Python操作多维数组输出和矩阵运算示例
Nov 28 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 #Python
如何使用pandas读取txt文件中指定的列(有无标题)
Mar 05 #Python
python批量替换文件名中的共同字符实例
Mar 05 #Python
python批量修改xml属性的实现方式
Mar 05 #Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 #Python
Python实现在Windows平台修改文件属性
Mar 05 #Python
Pycharm最常用的快捷键及使用技巧
Mar 05 #Python
You might like
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
PHP个人网站架设连环讲(一)
2006/10/09 PHP
解析PHP 5.5 新特性
2013/07/02 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
Ajax实现对静态页面的文章访问统计功能示例
2016/10/10 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
Prototype使用指南之dom.js
2007/01/10 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
js原型链原理看图说明
2012/07/07 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
Vue修改项目启动端口号方法
2019/11/07 Javascript
js实现车辆管理系统
2020/08/26 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
django Admin文档生成器使用详解
2019/07/22 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
linux面试题参考答案(6)
2016/06/23 面试题
证券期货行业个人的自我评价
2013/12/26 职场文书
社区包粽子活动方案
2014/01/21 职场文书
管理失职检讨书
2014/02/12 职场文书
招聘专员岗位职责
2014/03/07 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书