Python 參數設置


1. 配置文件(ConfigParser模塊)

1.1 ConfigParser簡介

ConfigParser 是用來讀取配置文件的包。配置文件的格式如下:中括號“[ ]”內包含的為section。section 下面為類似於key-value的options內容。例如

[db]
db_host = 127.0.0.1
db_port = 22
db_user = root
db_pass = rootroot
 
[concurrent]
thread = 10
processor = 20

 

1.2 ConfigParser 初始工作

使用ConfigParser 首選需要初始化實例,並讀取配置文件:

import ConfigParser
cf = ConfigParser.ConfigParser()
cf.read("配置文件名")

 

1.3 ConfigParser函數

1.3.1. 獲取所有sections

>>> s = cf.sections()
>>> print s
['db', 'concurrent']

1.3.2 獲得指定section的options

>>> cf.options('db')
['db_host', 'db_port', 'db_user', 'db_pass']

1.3.3 獲得指定sections的配置信息

>>> cf.items('db')
[('db_host', '127.0.0.1'), ('db_port', '22'), ('db_user', 'root'), ('db_pass', 'rootroot')]

1.3.4 獲得指定sections的option的信息

>>> cf.get("db", "db_host")
'127.0.0.1'
>>> cf.getint("db", "db_port")
22

同樣有getfloat、getboolean

以下注意:凡是改變文件內容的,都要最后寫入。

1.3.5 設置某個option的值

>>> cf.set("db", "db_host", "127.1.1.1")
>>> cf.write(open("config.ini", 'w'))

寫入后的文件內容為

[db]
db_host = 127.1.1.1
db_port = 22
db_user = root
db_pass = rootroot

[concurrent]
thread = 10
processor = 20

1.3.6 添加一個section

>>> cf.add_section("jihite")
>>> cf.set("jihite", "int", "15")
>>> cf.set("jihite", "bool", "True")
>>> cf.set("jihite", "float", "3.14")
>>> cf.write(open("config.ini", 'w'))

寫入后的文件內容為

[db]
db_host = 127.1.1.1
db_port = 22
db_user = root
db_pass = rootroot

[concurrent]
thread = 10
processor = 20

[jihite]
int = 15
bool = True
float = 3.14

1.3.7 移除一個section

>>> cf.remove_option("jihite", "int")
True
>>> cf.write(open("config.ini", 'w'))

改變后的文件為

[db]
db_host = 127.1.1.1
db_port = 22
db_user = root
db_pass = rootroot

[concurrent]
thread = 10
processor = 20

[jihite]
bool = True
float = 3.14

1.3.8 移除一個option

>>> cf.remove_section("jihite")
True
>>> cf.write(open("config.ini", 'w'))

改變后的文件為

[db]
db_host = 127.1.1.1
db_port = 22
db_user = root
db_pass = rootroot

[concurrent]
thread = 10
processor = 20  

1.4 ConfigParser舉例

 

方式二:解析參數(argparse模塊)

 

2. 解析參數(argparse模塊)

2.1 argparse簡介

argparse是python的命令行解析工具,它是Python標准庫中推薦使用的編寫命令行程序的工具。

 

2.2 argparser 初始工作

import argparse
parser = argparse.ArgumentParser()

類ArgumentParser定義為:

class ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=argparse.HelpFormatter, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True)

參數的含義為

2.2.1 prog:程序的名字,默認為sys.argv[0] 

>>> parser = argparse.ArgumentParser(prog="myprogram")
>>> parser.print_help()
usage: myprogram [-h]

optional arguments:
  -h, --help  show this help message and exit

2.2.2 usage: 描述程序用途的字符串

例子

del.py

import argparse
if __name__=="__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('content', help='content')
    parser.add_argument('title', help='title')
    parser.add_argument('tolist', help='tolist')
    args = parser.parse_args()
    content, title, tolist = args.content, args.title, args.tolist

    mail=SMTP_SSL()
    mail.sendMail(content, title, tolist)

執行

python2.7 del.py
usage: del.py [-h] content title tolist
del.py: error: too few arguments  

2.2.3

更多參數

 

parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true")
parser.add_argument('numbers', type=int, help="numbers to calculate", nargs='+')
parser.add_argument('-s', '--sum', help="sum all numbers", action='store_true', default=True)
parser.add_argument('-f', '--format', choices=['int', 'float'], help='choose result format', default='idsf')

更詳細參考

 

2.3 添加參數選項

http://www.cnblogs.com/linxiyue/p/3908623.html?utm_source=tuicool

 

3. 綜合實例

要求

1. 配置文件和輸入參數兩種方式,其中輸入參數優先級高

2. 參數包括配置文件、下載目錄、進程個數、日志文件、日志類型

3. 如果進程個數不知,那么默認為機器cpu核數

4. 如果參數類型不知,那么默認為3

def setArgs():
    parse = argparse.ArgumentParser(prog = "down_v9.py", usage="%(prog)s [options]")
    parse.add_argument("-c", "-config", type=str, help="配置文件")
    parse.add_argument("-o", "-outdir", type=str, help="下載目錄")
    parse.add_argument("-p", "-processnum", type=int, help="進程個數")
    parse.add_argument("-l", "-logfile", type=str, help="日志文件")
    parse.add_argument("-lt", "-logtype", type=str, help="輸出日志類型:1,只顯示到屏幕;2,只輸出到日志文件;3,即顯示到屏幕又輸出到日志文件")
    args = parse.parse_args()
    return args

def get_args():
    args = setArgs()
    config = args.c
    outdir = args.o
    process_num = args.p
    logfile = args.l
    logtype = args.lt

    if config and os.path.isfile(config):
        cf = ConfigParser.ConfigParser()
        cf.read(config)
        s = cf.sections()
        if "con" in s:
            cons = cf.options("con")
            if outdir == None and "outdir" in cons:
                outdir = cf.get("con", "outdir")
            if process_num == None and "process_num" in cons:
                process_num = cf.getint("con", "process_num")
            if logfile == None and "logfile" in cons:
                logfile = cf.get("con", "logfile")
            if logtype == None and "logtype" in cons:
                logtype = cf.get("con", "logtype")
    if process_num == None:
        process_num = multiprocessing.cpu_count()
    if logtype == None:
        logtype = 3

    return [outdir, process_num, logfile, logtype]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM