用Python 3编写的Python 3代码生成器

目录

介绍

使用代码

关于create_python_prog.py

关于variable_name

关于parameter_type

关于parameter_count_token

关于parameter_switches

有关布尔参数的其他信息

示例命令行

附录

兴趣点


介绍

此程序生成解析命令行参数并显示输入值的Python 3程序。该程序的目的是允许快速创建Python 3程序的解析代码和帮助文本。

如果我更新此内容,我将再次上传并更改版本号,当前为1.1.1

使用代码

用法:

python create_python_prog.py <program_name> [parameter 1] [parameter 2} ... [parameter N]

python create_python_prog.py [-h | --help]

关于create_python_prog.py

此程序生成解析命令行参数并显示输入值的Python 3程序。该程序的目的是允许快速创建Python 3程序的解析代码和帮助文本。

传递给此程序的参数指定生成的程序名称和生成的程序参数的创建。

每个参数都是一个逗号分隔的列表,其格式为:

<variable_name[=initial_value]>[,parameter_type][,parameter_count_token]
[,-one_char_switch][,--long_switch]

变量名称是必需的,并且必须是第一个。可选parameter_type、可选parameter_count_token和可选parameter_switch或开关可以按任意顺序排列。

只需要变量名称。所有其他项目都是可选的。

参数开关必须以一个或两个连字符('-')字符开头。只能为可选参数指定初始值。可选参数包括开关参数和parameter_count_token等于?*的位置参数。

关于variable_name

变量名称必须以英文字母表中的字母开头。变量名称的其余部分可能包含英文字母、数字或下划线字符“_”

如果stringinitial_value包含空格字符,则必须用双引号字符分隔初始值。

布尔参数的唯一有效默认值是FalseTrue

关于parameter_type

parameter_type说明符可以是以下字符之一。如果没有为每种类型指定initial_value,则使用指示的初始值默认值。

  • sstr——参数,默认为空字符串,或 ''。string
  • iint——整数参数,默认为0
  • ffloat——浮点参数,默认为0.0
  • bbool——布尔参数,默认为False。布尔参数必须是可选参数,即使用以连字符开头的开关控制的参数。

如果未指定parameter_type,则parameter_type默认为string参数。

关于parameter_count_token

可选的计数标记控制指定参数类型接受的参数数。如果数字不止一个,则由给定名称指定的变量将是一个Python列表。这个最后一个可选计数参数在参数分析器代码中用作'nargs'。该nargs参数通常是以下参数之一:

  • *——接受0个或多个参数类型
  • +——接受1个或多个参数类型
  • ?——参数是可选的
  • [大于零的正整数]——接受指定数量的参数,例如2

如果未指定parameter_count_token,则在运行时,仅在命令行中为该参数输入一个值。如果parameter_count_token表示多个值,则variable_name标识一个Python列表实例,并且输入的每个值都将通过生成的解析代码添加到列表中。

关于parameter_switches

初始连字符表示parameter_switch。单个连字符表示单个字符的开关名称。两个初始连字符指定长名称开关。

可以同时指定短名称开关和长名称开关。

-h--help开关是自动实现的,不应指定为switch参数。运行生成的程序时,使用任一帮助开关都会导致在生成的程序开始时输出__doc__string

有关布尔参数的其他信息

带有parameter_typebbool的布尔参数只能是可选switch参数。在生成的程序中对布尔参数使用switch会导致布尔参数的变量名设置为与initial_value相反的值。如果未指定初始值,则布尔参数的缺省值为False

示例命令行

python create_python_prog.py foo alpha,i beta,f,+ file_name gamma,b,-g,--gma

此命令行生成一个名为'foo.py'的程序,该程序采用名为'alpha'的整数参数和一个或多个位于名为'beta'的列表中的浮点参数,然后是一个名为file_namestring参数,最后是一个名为'gamma'的可选参数,该参数是一个布尔值,如果指定了'-g'开关或'--gma'开关,则该值仅为'True'

python create_python_prog.py foo file_name='bar.txt',?

命令行中的?字符使file_name参数成为可选参数。如果未指定参数,则变量'file_name'设置为'bar.txt'

附录

生成的代码使用Python的参数解析器模块。若要添加参数,请使用Add_argument方法。不使用Add_mutually_exclusive_groupSubparsers方法。如果需要,修改生成的代码以使用这些附加方法相对容易。

下面是使用以下命令创建的示例生成程序:

python create_python_prog.py foo.py text_desc amount,i value=0.5,f,? maxval,
f,-m,--max display_flag,b,-d,--disp

这是生成的Python 3程序。

#!/usr/bin/env python
"""
    python foo.py <text_desc> <amount> [value] [-m <maxval> | --max <maxval>]
                  [-d <display_flag> | --disp <display_flag>]

    python foo.py [-h | --help]

    TODO: Add usage information here.
"""
import sys
# TODO: Uncomment or add imports here.
#import os
#import re
#import time
#import urllib
#import subprocess
from argparse import ArgumentParser

def foo_main(text_desc, amount, value, maxval, display_flag):
    """ TODO: Add docstring here. """
    # TODO: Add or delete code here.
    # Dump all passed argument values.
    print(f"{text_desc=}")
    print(f"{amount=}")
    print(f"{value=}")
    print(f"{maxval=}")
    print(f"{display_flag=}")
    return 0

# Start of main program.
def main(argv=None):
    # Initialize the command line parser.
    parser = ArgumentParser(description='TODO: Text to display before the argument help.',
                            epilog=f'Copyright (c) 2022 TODO: your-name-here.',
                            add_help=True,
                            argument_default=None, # Global argument default
                            usage=__doc__)
    parser.add_argument(action='store', dest='text_desc', \
                        help='A string value that TODO:')
    parser.add_argument(action='store', dest='amount', \
                        type=int, help='A integer value that TODO:')
    parser.add_argument(action='store', dest='value', \
    type=float, default=0.5, nargs='?', help='A floating point value that TODO:')
    parser.add_argument('-m', '--max', action='store', dest='maxval', \
    type=float, default=0.0, help='A floating point value that TODO:')
    parser.add_argument('-d', '--disp', action='store_true', \
    dest='display_flag', default=False, help='A Boolean value that TODO:')
    # Parse the command line.
    arguments = parser.parse_args(args=argv)
    text_desc = arguments.text_desc
    amount = arguments.amount
    value = arguments.value
    maxval = arguments.maxval
    display_flag = arguments.display_flag
    status = 0
    try:
        foo_main(text_desc, amount, value, maxval, display_flag)
    except ValueError as value_error:
        print(value_error)
        status = -1
    except OSError as os_error:
        print(os_error)
        status = -1
    except MemoryError as mem_error:
        print(mem_error)
        status = -1
    return status

if __name__ == "__main__":
    sys.exit(main())

这是上面显示的生成程序的帮助输出:

python foo.py -h
usage:
python foo.py <text_desc> <amount> [value] [-m <maxval> | --max <maxval>]
[-d <display_flag> | --disp <display_flag>]

 python foo.py [-h | --help]

 TODO: Add usage information here.

 TODO: Text to display before the argument help.

positional arguments:
text_desc     A string value that TODO:
amount        A integer value that TODO:
value         A floating point value that TODO: 

options:
-h, --help    show this help message and exit
-m MAXVAL, --max MAXVAL A floating point value that TODO:
-d, --disp   A Boolean value that TODO:

Copyright (c) 2022 TODO: your-name-here.

兴趣点

通常想要打印变量名称和值,例如:

some_variable='variable_value'

Python 3.8及更高版本通过在变量名后添加一个等号(即=)使使用f-string变得非常容易。
上面的输出打印有以下行。这适用于字符串、整数、浮点数和布尔变量。

print(f"{some_variable=}")

如果您使用的是Python 3.8之前的早期版本,则必须将上面的行更改为:

print(f"some_variable={some_variable}")

我相信这是早期版本的Python 3.x必须更改的唯一功能。

https://www.codeproject.com/Articles/5346694/Python-3-Code-Generator-Written-in-Python-3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值