Press "Enter" to skip to content

python调用shell脚本

os.system(command) 返回command命令的退出状态。这实际上是使用C标准库函数system()实现的。这个函数在执行command命令时需要重新打开一个终端,并且无法保存command命令的执行结果。

os.popen(command,mode) 返回command命令的执行结果。返回值是一个文件对象,可以读或者写(由mode决定,mode默认是’r’)。如果mode为’r’,可以使用此函数的返回值调用read()来获取command命令的执行结果。如a=os.popen(cmd).read()。还可以使用 a.rstrip() 进行去除换行符“\n”。

commands.getstatusoutput(command) 返回command命令的执行状态和执行结果,返回的是一个元组。该方法其实也是对popen的封装。

演示1:

import os
line=os.popen('date -d -5day +"%Y%m%d"','r')
print line.read().rstrip()  #调用read()方法获取结果,调用rstrip()方法去除换行符

执行结果如下

[root@bear ~]# python 9.py
20130306  #如果不调用rstrip()方法,后面会多出一行空行

演示2:

import commands
line=commands.getstatusoutput('date -d -5day +"%Y%m%d"')  #获取5天前的日期
print line[0]  #输出命令执行状态
print line[1]  #输出命令执行结果
print type(line)
print type(line[1])

执行结果如下:

[root@bear ~]# python 8.py
0
20130306
  #line是一个元组
  #line[1]是一个字符串

参考资料:
http://www.cnblogs.com/lovemo1314/archive/2010/11/08/1871781.html

补充资料:
python调用当前时间:

import time
from datetime import date,datetime,timedelta
a=time.strftime('%Y-%m-%d %H:%M:%S')
print a

b=datetime.now()
print timedelta(5)
print (b - timedelta(5))

c=date.today()
d=datetime.today()
print (str(c.year) + ' ' + str(c.month) + ' ' + str(c.day))
print (str(d.year) + ' ' + str(d.month) + ' ' + str(d.day) + ' '  + str(d.hour) + ' ' + str(d.minute))

执行结果为

2013-03-20 00:49:33    //通过time.strftime('%Y-%m-%d %H:%M:%S')获取到的时间
5 days, 0:00:00    //timedelta(5)表示5天的间隔
2013-03-15 00:49:33.236086    //(b - timedelta(5))表示5天前的时间
2013 3 20    //通过date.today()获取到的年,月,日
2013 3 20 0 49    //通过datetime.today()获取到的年,月,日,时,分
Leave a Reply

Your email address will not be published. Required fields are marked *