1 Python中执行系统命令常见的几种方法 2 一,使用os模块 3 import os 4 1,os.system 5 6 import os 7 os.system('cat /proc/cupinfo') ## 类似于perl中的system命令,不能获取命令返回结果,只返回成功或失败 8 注意: 9 本质是调用标准C的system() 函数,仅仅在一个子终端运行系统命令, 10 ##不能获取命令执行后的返回信息。 11 12 2, os.popen ##相当于perl中的readpipe 和 `` 13 14 output = os.popen('cat /proc/cpuinfo') 15 print output.read() 16 #print output.readlines() 17 注意: 18 19 ##执行命令后返回的信息的对象, 20 ##必须使用read()方法来将结果读取出来 21 ## 返回的结果是字符串 ,是str的类型 22 本质是通过一个管道文件将结果返回。 23 所以进行读写时,里面也是相当于会有文件指针的 24 25 二, 使用模块commands模块 26 import commands 27 28 (status, output) = commands.getstatusoutput('cat /proc/cpuinfo') 29 30 print status,output 31 print output ####一般是只打印出元组中第2个元素即可,第2个才是真正命令的结果,第1个只是返回运行状态 32 33 34 35 36 注意1:在类unix的系统下使用此方法返回的返回值(status)与脚本或命令执行之后的返回值不等,这是因为调用了os.wait()的缘故, 37 38 具体原因就得去了解下系统wait()的实现了。需要正确的返回值(status),只需要对返回值进行右移8位操作就可以了。 39 40 注意2:当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess。 41 42 三,使用模块subprocess 43 44 Subprocess是一个功能强大的子进程管理模块,是替换os.system ,os.spawn* 等方法的一个模块。 45 46 Class subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, 47 48 stderr=None, preexec_fn=None, close_fds=True, shell=False, 49 50 cwd=None, env=None, universal_newlines=False, startupinfo=None, 51 52 creationflags=0, restore_signals=True, start_new_session=False, pass_fds=()) 53 54 有丰富的参数可以进行配置,可供我们自定义的选项多,灵活性高。 55 之前我使用os.system的时候遇到文件描述符被子进程继承的问题,后来通过close_fds = False 这个参数来解决的。