Python模块之optparse

参考:

  • http://www.cnblogs.com/captain_jack/archive/2011/01/11/1933366.html
  • https://docs.python.org/2/library/optparse.html

eg:

# This is the blocking Get Poetry Now! client.

import datetime, optparse, socket

def parse_args():
    usage = """usage: %prog [options] [hostname]:port ...

This is the Get Poetry Now! client, blocking edition.
Run it like this:

  python get-poetry.py port1 port2 port3 ...

If you are in the base directory of the twisted-intro package,
you could run it like this:

  python blocking-client/get-poetry.py 10001 10002 10003

to grab poetry from servers on ports 10001, 10002, and 10003.

Of course, there need to be servers listening on those ports
for that to work.
"""

    parser = optparse.OptionParser(usage)

    _, addresses = parser.parse_args()

    if not addresses:
        print parser.format_help()
        parser.exit()

    def parse_address(addr):
        if ‘:‘ not in addr:
            host = ‘127.0.0.1‘
            port = addr
        else:
            host, port = addr.split(‘:‘, 1)

        if not port.isdigit():
            parser.error(‘Ports must be integers.‘)

        return host, int(port)

    return map(parse_address, addresses)

def get_poetry(address):
    """Download a piece of poetry from the given address."""

    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(address)

    poem = ‘‘

    while True:

        # This is the ‘blocking‘ call in this synchronous program.
        # The recv() method will block for an indeterminate period
        # of time waiting for bytes to be received from the server.

        data = sock.recv(1024)

        if not data:
            sock.close()
            break

        poem += data

    return poem

def format_address(address):
    host, port = address
    return ‘%s:%s‘ % (host or ‘127.0.0.1‘, port)

def main():
    addresses = parse_args()

    elapsed = datetime.timedelta()

    for i, address in enumerate(addresses):    #http://blog.csdn.net/suofiya2008/article/details/5603861
        addr_fmt = format_address(address)

        print ‘Task %d: get poetry from: %s‘ % (i + 1, addr_fmt)

        start = datetime.datetime.now()

        # Each execution of ‘get_poetry‘ corresponds to the
        # execution of one synchronous task in Figure 1 here:
        # http://krondo.com/?p=1209#figure1

        poem = get_poetry(address)

        time = datetime.datetime.now() - start

        msg = ‘Task %d: got %d bytes of poetry from %s in %s‘
        print  msg % (i + 1, len(poem), addr_fmt, time)

        elapsed += time

    print ‘Got %d poems in %s‘ % (len(addresses), elapsed)

if __name__ == ‘__main__‘:
    main()
时间: 2024-10-27 13:08:53

Python模块之optparse的相关文章

转载---Python模块学习optparse 处理命令行参数

参考资料 http://docs.python.org/library/optparse.html 原文地址 http://mrwlwan.wordpress.com/2008/09/25/python%ef%bc%9a-%e4%bd%bf%e7%94%a8-optparse-%e5%a4%84%e7%90% Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强

Python模块学习——optparse

optparse内建的模块用于处理Python 命令行参数. 简单流程 首先,必须 import OptionParser 类,创建一个 OptionParser 对象: from optparse import OptionParser [...] parser = OptionParser() 然后,使用 add_option 来定义命令行参数: parser.add_option(opt_str, ..., attr=value, ...) 每个命令行参数就是由参数名字符串和参数属性组成的

python 模块 optparse

optparse,是一个能够让程式设计人员轻松设计出简单明了.易于使用.符合标准的Unix命令列程式的Python模块.生成使用和帮助信息. 下面是一个简单的示例: import optparse parser = optparse.OptionParser() parser.add_option( "-f", "--file", dest="filename", help="write report to FILE", me

Python模块学习之optparse

python 2.3里新增加了一个模块叫optparse,专门用来处理命令行选项的. optparse在2.7以后的版本中已经不再继续开发,从2.7后将转向开发argparse模块 先从简单示例(demo.py)介绍 from optparse import OptionParser parser = OptionParser() parser.add_option("-f", "--file", dest="filename", help=&q

Python - 模块(一)

目录 Python - 模块(一) 模块的引用方式 常用模块 random(随机模块) os模块 sys 序列化模块 hashlib subprocess optparse struct Python - 模块(一) 模块的引用方式 import 语句 执行对应文件 引入变量名 import time #导入时间模块,也可以同时导入多个模块,用逗号隔开 from ... import 模块名 from my_model import main from ... import * 引入一切,即导入

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

Python模块的交叉引用问题分析

实际项目中遇到python模块相互引用问题,查资料,说是通过import局部导入的方式可以避免错误,资料如附录所述. 但更改后测试还是会出错,很疑惑!? 如果哪位读者有好的解决方法,敬请留言说明,谢谢. 所以,最好的方法是不进行交叉引用,如果需要就单独分一个模块出来. 附录:Python模块的交叉引用问题解读:How can I have modules that mutually import each other? 有下面两个文件相互引用,Python解释器报错. foo.py: from

python模块以及导入出现ImportError: No module named &#39;xxx&#39;问题

python模块以及导入出现ImportError: No module named 'xxx'问题 python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模 块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用 如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比 如在a.py中使用b.py:  import b 但是如果要import一个不同目录的文件(例如b.py)该怎么做

python模块搜索路径

1.电脑版 (1).python安装目录中\Lib\site-packages\下建立*.pth文件,写入模块路径 (2).添加环境变量:变量名:pythonpath;变量值:模块(文件夹)路径 ,若有多个,用半角分号";"隔开 2.手机版 在resource\site.py文件中添加代码段 import syssys.path.append("模块(文件夹)路径") 发现:第一个参数都是C:\\resource 我的理解: 程序安装盘下的site.py指定模块路径