python调用脚本_Python执行脚本方法

subprocess模块

os.system、os.popen实现的功能在subprocess模块都可实现,推荐使用。并且subprocess模块还可调用外部系统命令来创建新子进程。subprocess执行系统命令的时候并不会让主进程去执行,而是主进程会开辟fork()出一个子进程去执行,并不会影响到主进程的运行。

subprocess模块主要有call()、Popen()函数。

3.1 subprocess.Popen()函数

语法:

subprocess.Popen(args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)

args:要调用的外部系统命令。

bufsize:默认值为0, 表示不缓存;为1表示行缓存;其他正数表示缓存使用的大小;负数-1表示使用系统默认的缓存大小。

stdin、stdout、stderr:分别表示标准输入、标准输出和标准错误。其值有PIPE、文件描述符和None等。默认值为None,表示从父进程继承。

shell:Linux中参数值为False时,Linux上通过调用os.execvp执行对应的程序。True时,Linux上直接调用系统shell来执行程序。Windows中参数shell设为true,程序将通过shell来执行。

cwd:设置子进程当前目录。

env:env是字典类型,指定子进程的环境变量。默认值为None,表示子进程的环境变量将从父进程中继承。

subprocess.PIPE:在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。执行结果丢到管道(共享内存空间,用于进程之间共享)。

例1:

cmd = 'ipconfig | findstr "192.168.1.128"'

p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) #将正确的执行结果丢到管道中。

res = p.stdout.read().decode('gbk') #主进程去管道里获取正确stdout的结果,并将获取的结果的bytes类型转换。

print(res)

print(type(res))

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

subprocess.Popen()方法与os.popen()相比较,os.popen()获取的输出结果是直接可读的,而subprocess.Popen()获取的输出结果是以二进制形式的且会有换行符。

3.2 subprocess.call()函数

调用外部系统命令,并返回执行结果码。功能类似于os.system(cmd)。0表示执行成功,返回1表示失败。

例子2:

import subprocess

res = subprocess.call('ping www.baidu.com', shell=True)

print('>>> ping www.baidu.com')

print('测试res:', res)

结果:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值