在swift中的命令設定並沒有進行字串的定義,而是使用了python的反射機制,也即,命令引數,是manager類中的函式名稱,先我們將用到的函式列舉如下,
函式command函式,是管理服務,也是直接進行命令下發的類,manager中的成員有的是命令執行函式,而有的則不是,那麼就需要進行區分,這裡我們使用的是@command進行區分的,使用@command宣告的函式就是命令執行函式,同時其函式名稱也是命令引數
def command(func):
"""decorator to declare which methods are accessible as commands, commands
always return 1 or 0, where 0 should indicate success.
:param func: function to make public
"""func.publicly_accessible = true
@functools.wraps(func)
rv = func(*a, **kw)
return 1 if rv else 0
manager相關函式如下
class manager(object):
@command
def status(self, **kwargs):
"""display status of tracked pids for server
"""status = 0
for server in self.servers:
status += server.status(**kwargs)
return status
@command
def start(self, **kwargs):
"""starts a server
"""setup_env()
status = 0
for server in self.servers:
server.launch(**kwargs)
if not kwargs.get('daemon', true):
for server in self.servers:
try:
status += server.interact(**kwargs)
except keyboardinterrupt:
print _('\nuser quit')
self.stop(**kwargs)
break
elif kwargs.get('wait', true):
for server in self.servers:
status += server.wait(**kwargs)
return status
... def list_commands(cls):
#返回一系列可以作為命令的函式的字串,三個雙引號,表示三個雙引號之間的內容都是乙個
"""get all publicly accessible commands
:returns: a list of string tuples (cmd, help), the method names who are
decorated as commands
"""get_method = lambda cmd: getattr(cls, cmd)#lambda匿名函式,定義了乙個變數get_method,引數是cmd,直接呼叫getattr
return sorted([(x.replace('_', '-'), get_method(x).__doc__.strip())
#遍歷manager物件的成員,如果成員又屬性'publicly_accessible',該屬性是在@command 中進行定義的而後面的for...語句,則是sort自定義的
#過濾執行體,符合條件的才會加入。則返回該成員,如果沒有,則返回false,對於符合條件的成員則獲得乙個鍵值對,乙個是名稱如"start"乙個是描述
for x in dir(cls) if
getattr(get_method(x), 'publicly_accessible', false)])#
import functools
def command(func):
func.publicly_accessible = true
@functools.wraps(func)
rv = func(*a, **kw)
return 1 if rv else 0
class manager():
"dasda"
@command
def status(self, **kwargs):
'miaoshustatus'
print 'status'
def start(self, **kwargs):
'miaoshustart'
print 'start'
def no_wait(self, **kwargs):
'miaoshunowait'
print 'no_wait'
def no_daemon(self, **kwargs):
'miaoshuno_daemon'
print 'no_daemon'
@classmethod
def list_commands(cls):
print getattr(getattr(cls,'status'),"publicly_accessible",false)
get_method = lambda cmd: getattr(cls, cmd)#lambda匿名函式,定義了乙個變數get_method,引數是cmd,直接呼叫getattr
return sorted([(x.replace('_', '-'), get_method(x).__doc__.strip())
for x in dir(cls) if
getattr(get_method(x), 'publicly_accessible', false)])
print manager.list_commands()
上述**可以直接執行,這樣我們就可以理解命令引數的問題了... 由PageRank想到的
首先來看看什麼是pagerank pagerank 技術 通過對由超過 50,000 萬個變數和 20 億個詞彙組成的方程進行計算,pagerank 能夠對網頁的重要性做出客觀的評價。pagerank 並不計算直接鏈結的數量,而是將從網頁 a 指向網頁 b 的鏈結解釋為由網頁 a 對網頁 b 所投的...
由Cannot find file 想到的
記錄一下 今天除錯程式,單步真機除錯,我日,程式一步一步走,盡然和程式根本就對不上號。特別奇怪。思考一下,應該是工程太多太雜,自己有不小心,讓它們混在一起打架了。於是繼續,把其它所有工程都關了,只開啟乙個,清理了所有工程。與此工程有關的直接搜尋清理,一直以來覺得沒有必要,但這次是為了保險起見。編譯工...
由VBA想到的
這段時間由於工作原因研究了一下 vba,感覺完全是如墜五里霧中,主要原因是對 atl乃至對 com技術的應用不了解。簡單說一下 vba,用過 office 系列軟體的朋友都知道它,用 vb語法來控制文件生成過程,很不錯。不只是 office,很多其它優秀軟體都有 vba模組,比如 autocad 這...