2007-08-20

 

Python Cookbook 3.10 重复执行命令

需求:

你需要重复的执行一个命令,并且可以指定优先级.

讨论:

time.sleep函数提供了简单的解决方案.

 import time, os, sys
def main(cmd, inc=60):
while True:
os.system(cmd)
time.sleep(inc)
if _ _name_ _ == '_ _main_ _' :
numargs = len(sys.argv) - 1
if numargs < 1 or numargs > 2:
print "usage: " + sys.argv[0] + " command [seconds_delay]"
sys.exit(1)
cmd = sys.argv[1]
if numargs < 3:
main(cmd)
else:
inc = int(sys.argv [2])
main(cmd, inc)
你可以使用本节的代码来偶然的执行某些命令(如传送),或者重复执行某些指令,如通知浏览器重复加载一个URL,使得总是能获得最新的网页内容.本节代码的结构是使用一个main函数体和使用if _ _name_ _=='_ _main_ _'语句来组织的.这是当脚本用于单独执行时的习惯性编写方式.代码体检查输入参数,然后调用main方法,这是组织代码的最好办法,这样也方便别的模块使用该模块的代码.
main函数接收一个cmd参数,它表示你要执行的系统命令的字符串,还有一个可选参数,及执行间隔时间,默认是60秒.main方法是一个循环过程,使用os.system来执行命令,并使用time.sleep来等待.
脚本的主体用于判断参数,参数都包含在sys.argv里面,第一个参数,sys.argv[0],是脚本的名称,一般可以用于标识自己.接下来,脚本判断了其余的一个或两个参数,第一个(必须)是要执行的命令,另一个(可选)是重复执行的时间间隔.(在传递命令的时候,最好使用引号将字符串包含起来,以免shell出现解析错误),如果没有第二个参数,main函数将使用默认的值,60秒.
需要注意的时候,如果有第二个参数,需要将它从string转换为int(sys.argv里面总是string),只要使用内建的int方法就可以了.
如果第二个参数不是合法的字符(包含非数字序列),调用int方法会抛出异常,程序中止.因为Python的一个设计原则就是:"错误不能隐藏,除非声明需要隐藏".

相关说明:

time.sleep(...)
    sleep(seconds)

    Delay execution for a given number of seconds.  The argument may be
    a floating point number for subsecond precision.

标签:


Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?