python调⽤shell脚本并传参_使⽤python执⾏shell脚本并动态
传参及sub。。。
最近⼯作需求中 有遇到这个情况 在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参数。createprocessa
可以先创建⼀个简单的shell脚本 a.sh
12 分别代表传进脚本的 第⼀个和第⼆个参数
如果不写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 即通过管道 ad()取出 该进程的标准输出
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
Popenmunicate(input=None) 将信息输⼊到进程,从stdout和stderr中读取数据,直到达到⽂件结尾。等待进程终⽌。可选的stdin参数应该是要发送到⼦进程的字符串,如果没有数据应发送给⼦进程,则为None。
返回⼀个元组(stdout,stderr) 但是读取的数据缓存在内存中,所以如果数据量很⼤或者⽆限,就不要使⽤这种⽅法
Popen.pid 返回⼦进程的pid
==0 —— ⼦进程正常退出;
0—— ⼦进程异常退出,returncode对应于出错码;
< 0—— ⼦进程被信号杀掉了。
Popen.kill() 杀死进程
以上这篇使⽤python执⾏shell脚本 并动态传参 及subprocess的使⽤详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。