Python中执行系统命令常见方法有两种:
两者均需 import os
(1) os.system
# 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息
system(command) -> exit_status
Execute the command (a string) in a subshell.
# 如果再命令行下执行,结果直接打印出来
(2) os.popen
# 该方法不但执行命令还返回执行后的信息对象
popen(command [, mode='r' [, bufsize]]) -> pipe
Open a pipe to/from a command returning a file object.
例如:
>>> tmp = os.popen('ls -l').readlines() >>> for a in tmp :
... print a
...
...
total 32
-rw-rw-r-- 1 xueqy xueqy 1183 2月 17 19:53 auto_upload.sh
-rw-rw-r-- 1 xueqy xueqy 0 2月 22 19:46 noLoadmedia_2.txt
-rw-rw-r-- 1 xueqy xueqy 1050 2月 19 13:44 python_readnoloadpdf.py
-rw-rw-r-- 1 xueqy xueqy 1163 2月 19 15:11 python_readnoloadpdf tosql.py
-rw-rw-r-- 1 xueqy xueqy 2990 2月 22 19:45 python_readnoloadpdftosql.py
-rw-rw-r-- 1 xueqy xueqy 1168 2月 4 10:39 python_spelling.py
-rw-rw-r-- 1 xueqy xueqy 749 2月 1 09:33 readAndWrite.py
-rw-rw-r-- 1 xueqy xueqy 529 1月 8 20:28 readDirs.py
-rw-rw-r-- 1 xueqy xueqy 899 2月 4 11:31 re.py
好处在于:将返回的结果赋于一变量,便于程序的处理。
(3) 使用模块subprocess
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()
(4) 使用模块commands模块
>>> import commands
>>> dir(commands)
['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'getoutput', 'getstatus', 'getstatusoutput', 'mk2arg', 'mkarg']
>>> commands.getoutput('date')
'2016\xe5\xb9\xb4 02\xe6\x9c\x88 22\xe6\x97\xa5 \xe6\x98\x9f\xe6\x9c\x9f\xe4\xb8\x80 21:02:12 CST'
>>> commands.getstatusoutput('date')
(0, '2016\xe5\xb9\xb4 02\xe6\x9c\x88 22\xe6\x97\xa5 \xe6\x98\x9f\xe6\x9c\x9f\xe4\xb8\x80 21:02:52 CST')
>>>
注意: 当执行命令的参数或者返回中包含了中文文字,那么建议使用subprocess,如果使用os.popen则会出现错误: