Python執行系統命令的方法
Python執行系統命令的方法 http://www.linux-field.com/?p=15php
Python中執行系統命令常見方法有兩種:二者均需 import oshtml
os.system
僅僅在一個子終端運行系統命令,而不能獲取命令執行後的返回信息java
system(command) -> exit_statuspython
Execute the command (a string) in a subshell.linux
- 若是再命令行下執行,結果直接打印出來
>>> os.system('ls') 04101419778.CHM bash document media py-django video 11.wmv books downloads Pictures python all-20061022 Desktop Examples project tools
os.popen
該方法不但執行命令還返回執行後的信息對象shell
popen(command [, mode='r' [, bufsize]]) -> pipedjango
Open a pipe to/from a command returning a file object.bash
例如:ide
>>>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 ']
好處在於:將返回的結果賦於一變量,便於程序的處理。學習
使用模塊subprocess
- Python中subprocess學習: http://blog.csdn.net/imzoer/article/details/8678029
>>> import subprocess >>> subprocess.call(["cmd", "arg1", "arg2"],shell=True)
獲取返回和輸出:
import subprocess p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in p.stdout.readlines(): print line, retval = p.wait()
使用模塊commands模塊
>>> import commands >>> dir(commands) ['__all__', '__builtins__', '__doc__', '__file__', '__name__', 'getoutput', 'getstatus','getstatusoutput', 'mk2arg', 'mkarg'] >>> commands.getoutput("date") 'Wed Jun 10 19:39:57 CST 2009' >>> >>> commands.getstatusoutput("date") (0, 'Wed Jun 10 19:40:41 CST 2009')
注意: 當執行命令的參數或者返回中包含了中文文字,那麼建議使用subprocess,若是使用os.popen則會出現下面的錯誤:
Traceback (most recent call last): File "./test1.py", line 56, in <module> main() File "./test1.py", line 45, in main fax.sendFax() File "./mailfax/Fax.py", line 13, in sendFax os.popen(cmd) UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-52: ordinal not inrange(128)