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)