python中shell执行知识点
os.system
system方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。
importos os.system('ls')
commands.getstatusoutput
当需要得到外部程序的输出结果时,本方法非常有用。比如使用urllib调用WebAPI时,需要对得到的数据进行处理。os.popen(cmd)要得到命令的输出内容,只需再调用下read()或readlines()等如a=os.popen(cmd).read()
importos ls=os.popen('ls') printls.read()
commands.getstatusoutput
使用commands模块的getoutput方法,这种方法同popend的区别在于popen返回的是一个文件句柄,而本方法将外部程序的输出结果当作字符串返回,很多情况下用起来要更方便些。
主要方法:
- commands.getstatusoutput(cmd)返回(status,output)
- commands.getoutput(cmd)只返回输出结果
- commands.getstatus(file)返回ls-ldfile的执行结果字符串,调用了getoutput,不建议使用此方法
importcommands commands.getstatusoutput('ls-lt')#返回(status,output)
subprocess.call
根据Python官方文档说明,subprocess模块用于取代上面这些模块。有一个用Python实现的并行ssh工具—mssh,代码很简短,不过很有意思,它在线程中调用subprocess启动子进程来干活。
fromsubprocessimportcall call(["ls","-l"])
importshlex,subprocess defshell_command(cmd,timeout): data={"rc":False,"timeout":False,"stdout":"","stderr":""} try: process=subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) try: outs,errs=process.communicate(timeout=timeout) data["stdout"]=outs.decode("utf-8") data["stderr"]=errs.decode("utf-8") data["rc"]=True exceptsubprocess.TimeoutExpired: process.kill() outs,errs=process.communicate() data["rc"]=False data["stdout"]=outs.decode("utf-8") data["stderr"]="timeout" data["timeout"]=True exceptExceptionase: data["rc"]=False data["stderr"]=e finally: returndata
到此这篇关于python中shell执行知识点的文章就介绍到这了,更多相关pythonshell执行内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!