这篇文章将为大家详细讲解有关Python执行脚本方法都有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
创新互联公司一直通过网站建设和网站营销帮助企业获得更多客户资源。 以"深度挖掘,量身打造,注重实效"的一站式服务,以成都网站建设、成都网站设计、移动互联产品、成都营销网站建设服务为核心业务。十余年网站制作的经验,使用新网站建设技术,全新开发出的标准网站,不但价格便宜而且实用、灵活,特别适合中小公司网站制作。网站管理系统简单易用,维护方便,您可以完全操作网站资料,是中小公司快速网站建设的选择。
Python中调用shell脚本,常用的函数有os.system、os.popen()和subprocess.Popen()
os.system方法
语法:os.system(cmd)
os.system()执行过程中主要执行了:fork()出一子进程;子进程调用exec()执行命令。
例1:
>>> import os >>> os.system('dir D:\Python')
执行成功,返回0。
例2:
import os res = os.system('ping www.baidu.com -n 3') if res == 0: print('成功') else: print('失败了')
执行结果:
注:
1).os.system()执行cmd指令,返回结果0表示执行成功,返回1表示失败。
2).os.system()无法获取在cmd输出的内容。
3).os.system()调用外部系统命令,返回命令结果码,无法获取命令执行输出结果。
os.popen方法
语法:popen(cmd, mode='r', buffering = -1)
参数:
cmd:要执行的命令。 mode:打开文件的模式,默认为'r',用法与open()相同。 buffering:(可选参数),0表无缓冲;1表行缓冲;-1表默认缓冲值;
os.popen()方法会打开一管道,返回结果是一连接管道的文件对象。执行成功返回文件对象中读取的返回结果,不返回状态码。执行失败,返回执行的错误信息。并且返回结果可赋于一变量,便于程序的处理。
例1:
文件内容:D:\Python\test.py
print('popen()测试')
文件内容:D:\Python\test2.py
res = os.popen(r'D:\Python\test.py', mode='r') res1 = res.read() #返回结果赋于一变量,便于程序的处理 print(res1) print(type(res1)) #返回str res.close()
python D:\Python\test2.py 执行结果:
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))
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)
结果:
关于Python执行脚本方法都有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。