Python执行Linux系统命令的4种方法
(1)os.system
仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息
system(command)->exit_status Executethecommand(astring)inasubshell.
如果再命令行下执行,结果直接打印出来
>>>os.system('ls') 04101419778.CHM bash document media py-django video 11.wmv books downloads Pictures python all-20061022 Desktop Examples project tools
(2)os.popen
该方法不但执行命令还返回执行后的信息对象
popen(command[,mode='r'[,bufsize]])->pipe Openapipeto/fromacommandreturningafileobject.
例如:
>>>tmp=os.popen('ls*.py').readlines() >>>tmp Out[21]: ['dump_db_pickle.py', 'dump_db_pickle_recs.py', 'dump_db_shelve.py', 'initdata.py', '__init__.py', 'make_db_pickle.py', 'make_db_pickle_recs.py', 'make_db_shelve.py', 'peopleinteract_query.py', 'reader.py', 'testargv.py', 'teststreams.py', 'update_db_pickle.py', 'writer.py']
好处在于:将返回的结果赋于一变量,便于程序的处理。
(3) 使用模块subprocess
>>>importsubprocess >>>subprocess.call(["cmd","arg1","arg2"],shell=True)
获取返回和输出:
importsubprocess p=subprocess.Popen('ls',shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT) forlineinp.stdout.readlines(): printline, retval=p.wait()
(4) 使用模块commands
>>>importcommands >>>dir(commands) ['__all__','__builtins__','__doc__','__file__','__name__','getoutput','getstatus','getstatusoutput','mk2arg','mkarg'] >>>commands.getoutput("date") 'WedJun1019:39:57CST2009' >>> >>>commands.getstatusoutput("date") (0,'WedJun1019:40:41CST2009')
注意:当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现下面的错误:
Traceback(mostrecentcalllast): File"./test1.py",line56,inmain() File"./test1.py",line45,inmain fax.sendFax() File"./mailfax/Fax.py",line13,insendFax os.popen(cmd) UnicodeEncodeError:'ascii'codeccan'tencodecharactersinposition46-52:ordinalnotinrange(128)