python 函式中定義函式
阿新 • • 發佈:2019-02-08
一直不明白這樣寫具體有什麼意義。直到我準備實現一個類似與 java
中的 Timer#schedule(TimerTask task,long delay, long period)
才發現,似乎 python
中沒有提供這種內建的重複定時器。而要實現這種重複定時器,似乎需要使用 “函式中定義函式的”的方式才可以。
def scheduler_build(delay, cmd):
def build_inner():
import os
import threading
print('execute==> ', delay, cmd)
os.system(cmd)
threading.Timer(delay, build_inner).start()
build_inner()
看上面的程式碼,如果不把delay, cmd
作為外部函式的引數,而是作為內部函式的引數,那麼threading.Timer(delay, build_inner)
會執行出差,提示沒有給函式提供引數。而放在外部就避免的這個問題。
放在外部,既可以讓內部函式使用到引數,又可以讓內部函式不用傳引數。
下面是完整實現,實現定時,每天在當前時刻執行一次命令:
# -*- coding: utf-8 -*-
def scheduler_build(delay, cmd):
def build_inner():
import os
import threading
print('execute==> ' , delay, cmd)
os.system(cmd)
threading.Timer(delay, build_inner).start()
build_inner()
def get_now(format="%Y-%m-%d %H:%M:%S"):
"""
獲取今天的日期 --> 返回字串 :2018-01-24
:param format: "%Y-%m-%d"
:return: 返回字串 :2018-01-24
"""
import time
formatTime = time.strftime(format, time.localtime(time.time()))
return formatTime
if "__main__" == __name__:
cmd = r'source build/envsetup.sh && lunch full_gm12b-userdebug && repo sync -j8 && make clean && source build/envsetup.sh && lunch full_gm12b-userdebug && make update-api && make -j8 2>&1 | tee build.log'
cmd = r'source build/envsetup.sh && lunch full_gm12b-userdebug'
scheduler_build(1 * 60 * 60 * 24, cmd)
pass
ps: 這個方法實際效果並不理想,感覺老是出現卡死的感覺。~