python获取命令行传参的两种种常用方法argparse解析getopt 模块解析

方法一:argparse解析

复制代码
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#  @Time: 2020/5/20 10:38
#  @Author:zhangmingda
#  @File: argparse_test.py
#  @Software: PyCharm
#  Description:
import argparse

parser = argparse.ArgumentParser("指定监听端口")
parser.add_argument('-p', '--port', default=80)
args = parser.parse_args()
print("获取命令行传参")
port = args.port
print("port=",port)
复制代码

  

 

 

方法二: getopt 模块解析,可以自定义错误提示

格式为:getopt.getopt(argv, options[, long_options])

argv为命令传入的参数列表,也就是sys.argv[1:]

该方法有两种传参形式:短 ('-') 和长 ('--')

options表示的是短选项,传入时需用(例如 :-f )形式传入参数,其中,有冒号(:) 表示 -f 之后必须传入值构成(例如:-f value),没有冒号则不用。

[, long_options]表示的是长选项,传入时需用(例如 :--f )形式传入参数,其中,有等于号(=) 表示 --f 之后必须传入值构成(例如:--f=value),没有等于号则不用。

使用时可以长短混合,比如多个参数,有的用长选项,有的用短选项;在程序中设置默认值之后,还可以不用传全部参数

  示例:

复制代码
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#  @Time: 2020/5/19 18:12
#  @Author:zhangmingda
#  @File: getopt_test.py
#  @Software: PyCharm
#  Description:

import getopt
import sys

def get_args_func(argv):
    port = '80'  # 默认值
    try:
        opts, args = getopt.getopt(argv, "hp::", ["help", "port="])
    # 表示参数选项有:-h/ --help -p/ --port,
    # 它们相互对应;该方法的返回值有两个元素: 第一个是(opt, value)元组的列表,第二个是一般参数列表,包含那些没有 '-' 或 '--' 的参数
    except getopt.GetoptError:
        # 获取到非指定的- 或者长选项--的参数给出正确提示
        print('GetoptError: python %s -p <port> ' % sys.argv[0])
        print('  GetoptError: python %s --port=<port>' % sys.argv[0] )
        sys.exit(2)
    for opt, value in opts:  # 依次获取列表中的元组项
        if opt in ("-h", "--help"):
            print(' USAGE: %s -p <port> ')
            print('or: %s --port=<port>')
            sys.exit(0)
        elif opt in ('-p','--port'):
            port = value
    print('-----------------------------------------------------------------------')
    print("get option -p or --port:",port)
    print("get other option ",args)

if __name__ == '__main__':
    get_args_func(sys.argv[1:])  # 因为sys.argv[0]是脚本名称,从第一位获取到最后
复制代码

  

 

posted on   zhangmingda  阅读(2595)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-05-20 Python3 json &pickle 数据序列化
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示