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

最近工作需求中 有遇到这个情况 在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 分别代表传进脚本的 第一个和第二个参数

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

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的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持菜鸟教程www.piaodoo.com。

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

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

相关文章

mysql replication延迟_深入mysql主从复制延迟问题的详解

面试mysqldba的时候遇到一个题&#xff1a;描述msyql replication 机制的实现原理&#xff0c;如何在不停掉mysql主库的情况下&#xff0c;恢复数据不一致的slave的数据库节点&#xff1f;MySQL的复制(replication)是一个异步的复制&#xff0c;从一个MySQL instace(称之为Mast…

gitlab 安装gitlabrunner 无法连接tiller_谈一谈GitLab Runner是个什么东东?

概念我从官网搜了一下&#xff0c;GitLab Runner 是一个开源项目&#xff0c; 它用来运行你定制的任务(jobs)并把结果返回给 GitLab。 GitLab Runner 配合GitLab CI(GitLab 内置的持续集成服务) 协调完成任务。gitlab想要了解 GitLab Runner之前&#xff0c;我们先要知道或者说…

mysql百万级去重_mysql优化小技巧之去除重复项(百万级数据)

mysql优化小技巧之去除重复项(百万级数据)发布时间&#xff1a;2018-06-11 11:54,浏览次数&#xff1a;482, 标签&#xff1a;mysql说到这个去重&#xff0c;脑仁不禁得一疼&#xff0c;尤其是出具量比较大的时候。毕竟咱不是专业的DB&#xff0c;所以嘞&#xff0c;只能自己弄…

高中必背88个数学公式_高中数学:必修+选修全部知识点精华!附高考必背203个公式...

童鞋们好呀&#xff0c;2021高考将至&#xff0c;但是很多高三同学还是处于一个很不好的状态感觉每一科都很紧张&#xff0c;学校学习的节奏快&#xff0c;自己基础又没跟上&#xff0c;还要补基础总觉得后一步还没跟上&#xff0c;就要迈下一步了&#xff0c;不知道从哪学&…

mysql获取逻辑日志_Mysql 逻辑架构图及日志系统

1、Mysql逻辑架构图场景一&#xff1a;一条SQL语句如何执行&#xff1f;如图显示一条SQL语句的执行过程&#xff1a;执行器的执行流程&#xff1a;2、Mysql日志系统说到日志系统&#xff0c;需要了解几个概念&#xff1a;creash-safe、redo log、binlog、WAL技术。Redo log用于…

专科学python真的不好_专科生转行做python运维靠谱吗?

看了下问题&#xff0c;专科做运维&#xff0c;的确在找工作的时候没有优势&#xff0c;but,这并不代表运维行业对学历要求高&#xff0c;而是你找别的工作&#xff0c;专科也没有什么优势。知乎水平动辄985&#xff0c;专科就显得那么的微不足道。但没有竞争力不太表找不到相关…

mysql实例详解_MySQL 多实例详解

MySQL多实例配置方法1、单一配置文件2、多配置文件。二、实战步骤&#xff1a;1、同步时间2、准备mysql依赖包3、环境准备3.1添加mysql用户3.2编译安装mysql4、安装MySQL多实例5、准备配置文件6、启动MySQL7、登录mysql与一些安全措施8、关闭MySQL9,、提供简易管理脚本10、为my…

如何提高go代码覆盖率_如何通过静态分析提高iOS代码质量

随着项目的扩大&#xff0c;依靠人工codereview来保证项目的质量&#xff0c;越来越不现实&#xff0c;这时就有必要借助于一种自动化的代码审查工具&#xff1a;程序静态分析。程序静态分析(Program Static Analysis)是指在不运行代码的方式下&#xff0c;通过词法分析、语法分…

mysql 查看表是否存在_MySQL优化篇二

单表优化最佳左前缀原则为&#xff0c;保持索引的定义和使用顺序的一致性将含In的范围查询&#xff0c;放到where条件语句的最后。索引需要逐步优化两表优化小表驱动大表避免索引失效的一些原则&#xff1a;复合索引&#xff0c;不要跨列或无序使用&#xff08;最佳左前缀&…

centos下mysql 命令_CentOS下mysql数据库常用命令总结

### 1.更改root密码mysqladmin -uroot password yourpassword### 2.远程登陆mysql服务器mysql -uroot -p -h192.168.137.10 -P3306### 3.查询数据库show databases;### 4.进入某个数据库use databasename;### 5.列出数据库中的表show tables;### 6.查看某个表全部字段desc slow…

java http请求_如何设置Fiddler来拦截Java代码发送HTTP请求,进行各种问题排查

我们使用Java的RestTemplate或者Apache的HTTPClient编程的时候&#xff0c;经常遇到需要跟踪Java代码发送的HTTP请求明细的情况。和javascript代码在浏览器里发送请求可以通过Chrome开发者工具方便地跟踪一样&#xff0c;对于Java代码发送的网络请求&#xff0c;我们也可以使用…

mysql自增id用完了_MySQL 自增 ID 用完了怎么办?

MySQL 自增 ID 用完了怎么办&#xff1f;在MySQL中有很多类型的自增ID&#xff0c;每个自增ID都设置了初始值&#xff0c;然后按照一定的步长增加&#xff0c;只要定义了字节长度&#xff0c;那么就会有上限&#xff0c;如果达到上限再次添加&#xff0c;则会报主键冲突错误&am…

第十篇学会编写python代码_Python之路,第十篇:Python入门与基础10

python3 函数函数(function)什么是函数&#xff1a;函数是可以重复执行的代码块&#xff0c;可以重复使用&#xff1b;作用&#xff1a; 定义用户级的函数&#xff1b;实现了一个代码块的封装&#xff1b;语法&#xff1a;def 函数名(参数列表)&#xff1a;语句块(代码块)...…

python报错怎么看_python中的错误如何查看

python常见的错误有1.NameError变量名错误2.IndentationError代码缩进错误3.AttributeError对象属性错误4.TypeError类型错误5.IOError输入输出错误6.KeyError字典键值错误具体介绍1.NameError变量名错误报错&#xff1a;>>> print aTraceback (most recent call last…

http通道连接mysql_通过http tunnel连接mysql

在/etc/nginx/nginx.conf的第一行加上load_module /usr/lib64/nginx/modules/ngx_http_proxy_connect_module.so;nginx -s reload> nginx: [emerg] dlopen() "/usr/lib64/nginx/modules/ngx_http_proxy_connect_module.so" failed (/usr/lib64/nginx/modules/ngx_…

山洪沟防洪治理工程技术规范_幸福沟水库一期工程完工丨尚志城市供水、防洪、农业灌溉皆升级...

日前&#xff0c;尚志市幸福沟水库一期工程建设完成&#xff0c;已蓄水试运行。幸福沟水库工程是列入黑龙江省“十三五”规划的重点水利项目&#xff0c;是哈市重点推进的两座中型水库之一&#xff0c;也是尚志市一项打基础、利长远、惠民生的重大战略民生工程。幸福沟水库位于…

子类怎么继承父类方法中的变量_JavaOOP_04 封装 继承

一、封装概念&#xff1a;隐藏程序内部的具体实现细节&#xff0c;对外提供接口&#xff0c;从而提高程序的安全性。高内聚&#xff0c;低耦合。使用封装的步骤&#xff1a;1、属性私有化&#xff0c;使用private访问修饰符进行修饰2、对外提供 setter/getter 方法 setter设置值…

mySQL字符串字段区别_MySQL类型之(字符串列类型区分、数据类型区分)

1.首先CHAR, VARCHAR, TEXT和BINARY, VARBINARY, BLOB的区别&#xff1a;CHAR, VARCHAR, TEXT称为&#xff1a; 非二进制字符串;BINARY, VARBINARY, BLOB称为&#xff1a;二进制字符串;非二进制字符串和二进制字符串的区别是&#xff1a;非二进制字符串包含的是字符字符串…

mysql 社区版密码如何修改_如何用优雅的方法修改MySQL root密码

搭噶好&#xff0c;我系小编&#xff0c;我好久没发文章了啊&#xff0c;今天发文章的原因是&#xff0c;我竟然忘了我的MySQL root密码。。本来想找RAKsmart客服直接重置啥的&#xff0c;后来想想还是自己搞吧&#xff0c;还能长知识。然后&#xff0c;我发现一个事情&#xf…

python全局变量赋值_Python全局变量和局部变量

python中&#xff0c;对于变量作用域的规定有些不一样。在诸如C/C、java等编程语言中&#xff0c;默认在函数的内部是能够直接訪问在函数外定义的全局变量的&#xff0c;可是这一点在python中就会有问题。以下是一个样例。test.py:#!/usr/bin/pythonCOUNT1def func():COUNT CO…