Python寫(xiě)的簡(jiǎn)易代碼統(tǒng)計(jì)工具(2)
本文介紹代碼統(tǒng)計(jì)工具控制臺(tái)界面部分。
控制臺(tái)界面就是用命令行形式執(zhí)行程序。主要內(nèi)容是輸入?yún)?shù)和結(jié)果輸出。Python有一個(gè)命令行解析模塊getopt。它能解析兩種選項(xiàng)格式:短格式,長(zhǎng)格式。
短格式:"-"號(hào)后面要緊跟一個(gè)選項(xiàng)字母。如果還有此選項(xiàng)的附加參數(shù),可以用空格分開(kāi),也可以不分開(kāi)。長(zhǎng)度任意,可以用引號(hào)。
-v [正確]
-omyfile.py [正確]
-o myfile.py [正確]
-o "myfile.py" [正確]
長(zhǎng)格式:"--"號(hào)后面要跟一個(gè)單詞。如果還有些選項(xiàng)的附加參數(shù),后面要緊跟"=",再加上參數(shù)。"="號(hào)前后不能有空格。
--output=myfile.py [正確]
-- output=myfile.py [不正確]
--output= myfile.py [不正確]
--output = myfile.py [不正確]
getopt模塊中函數(shù)介紹
opts, args=getopt(args, shortopts, longopts=[])
參數(shù)args:需要解析的全部字符串
參數(shù)shortopt:短格式選項(xiàng),如'hf:',h表示-h,f:表示-f string,冒號(hào)表示后面跟有參數(shù)。
參數(shù)longopt:長(zhǎng)格式選項(xiàng),如['help', 'output='],help表示--help,output=表示output=string,等號(hào)表示選項(xiàng)需要賦值。
返回值opts:選項(xiàng)和參數(shù)對(duì)。
返回值args:沒(méi)有匹配上的選項(xiàng)的參數(shù)。
注:-f filename.py 中‘-f’是選項(xiàng),‘filename’是參數(shù)。
如果匹配不符就會(huì)拋出異常,如格式是'hf:',則(假設(shè)程序名為program)
program -s [不適合的選項(xiàng)]
program -f [此選項(xiàng)需要跟參數(shù)]
都會(huì)拋出異常。
此程序制裁采用了短格式,它需要調(diào)用counter.py的函數(shù)。
下面是CodeCounter.py中的代碼:
# -*- coding: cp936 -*-
'''
統(tǒng)計(jì)文件或目錄的代碼和注釋
usage: CodeCounter [-hfdlmto] [string|n]
-h 顯示幫助信息
-f string 統(tǒng)計(jì)string文件
-d string 統(tǒng)計(jì)string目錄
-l n 統(tǒng)計(jì)n層子目錄,-1表示所有子目錄
-m string 要統(tǒng)計(jì)文件的后綴名,格式如:.c,.h,.cpp
-t string 代碼類(lèi)型,c表示C/C++語(yǔ)言,py表示Python
-o n 輸出格式,0表示簡(jiǎn)易輸出,1表示全部輸出
'''

import sys
import getopt
# 統(tǒng)計(jì)工具的工作部分,見(jiàn)couter.py
from counter import CodeCounter

def usage():
print __doc__

def errmsg():
print "參數(shù)不對(duì),請(qǐng)參考幫助信息. \nCodeCounter -h顯示幫助信息."

def print_result(result, out):
print "全部\t代碼\t注釋\t空行\(zhòng)t文件名"
total = [0,0,0,0]
for ele in result:
total[0] += ele[1][4]
total[1] += ele[1][1]+ele[1][3]
total[2] += ele[1][2]+ele[1][3]
total[3] += ele[1][0]

if out == 1:
for ele in result:
print "%d\t%d\t%d\t%d\t%s" %(ele[1][4], ele[1][1]+ele[1][3],
ele[1][2]+ele[1][3], ele[1][0], ele[0])
print "%d\t%d\t%d\t%d\t總計(jì)" % (total[0], total[1], total[2], total[3])
def main(argv):
# 解析參數(shù)
try:
opts, args = getopt.getopt(argv[1:], 'hf:d:m:l:t:o:')
except getopt.GetoptError:
errmsg()
return

(counter, out, result) = (CodeCounter(), 0, [])

# 設(shè)置參數(shù)
for opt, arg in opts:
if opt in ['-h']:
usage()
return
elif opt in ['-f']:
counter.AddCodeFiles('f', arg)
elif opt in ['-d']:
counter.AddCodeFiles('d', arg)
elif opt in ['-m']:
counter.SetModes(arg)
elif opt in ['-l']:
counter.SetLevel(int(arg))
elif opt in ['-t']:
counter.SetCodeType(arg)
elif opt in ['-o']:
out = int(arg)

# 統(tǒng)計(jì)和輸出結(jié)果
counter.Count(result)
print_result(result, out)
if __name__ == '__main__':
try:
main(sys.argv)
except:
errmsg()
運(yùn)行如下:
D:\Work\stat>CodeCounter.py -h
統(tǒng)計(jì)文件或目錄的代碼和注釋
usage: CodeCounter [-hfdlmto] [string|n]
-h 顯示幫助信息
-f string 統(tǒng)計(jì)string文件
-d string 統(tǒng)計(jì)string目錄
-l n 統(tǒng)計(jì)n層子目錄,-1表示所有子目錄
-m string 要統(tǒng)計(jì)文件的后綴名,格式如:.c,.h,.cpp
-t string 代碼類(lèi)型,c表示C/C++語(yǔ)言,py表示Python
-o n 輸出格式,0表示簡(jiǎn)易輸出,1表示全部輸出
D:\Work\stat>CodeCounter.py -d . -o 1
全部 代碼 注釋 空行 文件名
46 40 15 3 .\stat.
46 40 15 3 總計(jì)
待續(xù)
控制臺(tái)界面就是用命令行形式執(zhí)行程序。主要內(nèi)容是輸入?yún)?shù)和結(jié)果輸出。Python有一個(gè)命令行解析模塊getopt。它能解析兩種選項(xiàng)格式:短格式,長(zhǎng)格式。
短格式:"-"號(hào)后面要緊跟一個(gè)選項(xiàng)字母。如果還有此選項(xiàng)的附加參數(shù),可以用空格分開(kāi),也可以不分開(kāi)。長(zhǎng)度任意,可以用引號(hào)。
-v [正確]
-omyfile.py [正確]
-o myfile.py [正確]
-o "myfile.py" [正確]
長(zhǎng)格式:"--"號(hào)后面要跟一個(gè)單詞。如果還有些選項(xiàng)的附加參數(shù),后面要緊跟"=",再加上參數(shù)。"="號(hào)前后不能有空格。
--output=myfile.py [正確]
-- output=myfile.py [不正確]
--output= myfile.py [不正確]
--output = myfile.py [不正確]
getopt模塊中函數(shù)介紹
opts, args=getopt(args, shortopts, longopts=[])
參數(shù)args:需要解析的全部字符串
參數(shù)shortopt:短格式選項(xiàng),如'hf:',h表示-h,f:表示-f string,冒號(hào)表示后面跟有參數(shù)。
參數(shù)longopt:長(zhǎng)格式選項(xiàng),如['help', 'output='],help表示--help,output=表示output=string,等號(hào)表示選項(xiàng)需要賦值。
返回值opts:選項(xiàng)和參數(shù)對(duì)。
返回值args:沒(méi)有匹配上的選項(xiàng)的參數(shù)。
注:-f filename.py 中‘-f’是選項(xiàng),‘filename’是參數(shù)。
如果匹配不符就會(huì)拋出異常,如格式是'hf:',則(假設(shè)程序名為program)
program -s [不適合的選項(xiàng)]
program -f [此選項(xiàng)需要跟參數(shù)]
都會(huì)拋出異常。
此程序制裁采用了短格式,它需要調(diào)用counter.py的函數(shù)。
下面是CodeCounter.py中的代碼:












































































運(yùn)行如下:
D:\Work\stat>CodeCounter.py -h
統(tǒng)計(jì)文件或目錄的代碼和注釋
usage: CodeCounter [-hfdlmto] [string|n]
-h 顯示幫助信息
-f string 統(tǒng)計(jì)string文件
-d string 統(tǒng)計(jì)string目錄
-l n 統(tǒng)計(jì)n層子目錄,-1表示所有子目錄
-m string 要統(tǒng)計(jì)文件的后綴名,格式如:.c,.h,.cpp
-t string 代碼類(lèi)型,c表示C/C++語(yǔ)言,py表示Python
-o n 輸出格式,0表示簡(jiǎn)易輸出,1表示全部輸出
D:\Work\stat>CodeCounter.py -d . -o 1
全部 代碼 注釋 空行 文件名
46 40 15 3 .\stat.
46 40 15 3 總計(jì)
待續(xù)
posted on 2008-01-11 16:09 lemene 閱讀(417) 評(píng)論(0) 編輯 收藏 引用