python执行shell命令os模块os.system方法:importosos.system('top')os.system('cat/proc/cpuinfo')可见这个调用很直接,而且它是同步执行的,程序需要阻塞等待返回。返回值依赖于系统,直接返回系统调用的返回值,所以windows和linux是不一样的。需要强调的一点是不支持参数,不支持pipelineos.open方法:importosoutput=os.popen('df')printoutput.read()#如果命令本身不报错,返回正确的值表示通过p.read()的popen方法获取终端输出,popen需要关闭close()。当执行成功时,close()不返回任何值。失败时,close()返回系统返回值。。可见其获取返回值的方式和os.system强调的不同的一点是不支持参数,不支持pipelinecommands模块。使用commands模块的getoutput方法。这个方法和popend的区别在于popen返回一个文件句柄,而这个方法使用外部程序的输出作为字符串返回,在很多情况下更方便。主要方法:commands.getstatusoutput(cmd)返回(status,output)commands.getoutput(cmd)只返回输出结果commands.getstatus(file)返回ls-ldfile的执行结果字符串,调用getoutput,不推荐使用此方法a=commands.getoutput('ps-ef')b=commands.getstatusoutput('vmstat')subprocess模块显示可以使用subprocess模块创建新进程。能够与新创建的进程的输入/输出/错误管道进行通信。并且能够获取到新建进程运行的返回状态。使用subprocess模块的目的是替换旧的函数或模块,例如os.system()、os.popen()、commands.等。subprocess.call(["some_command","some_argument","another_argument_or_path")fromsubprocessimportcallcall(['ls','-l','/boot','/sys'])#call('ls-a/',shell=True)subprocess.Popen(command,shell=True)subprocess.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)参考博客https://blog.csdn.net/longerz...https://python.freelycode.com...
