目录
介绍
使用代码
关于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
变量名称必须以英文字母表中的字母开头。变量名称的其余部分可能包含英文字母、数字或下划线字符“_”。
如果string的initial_value包含空格字符,则必须用双引号字符分隔初始值。
布尔参数的唯一有效默认值是False和True。
关于parameter_type
parameter_type说明符可以是以下字符之一。如果没有为每种类型指定initial_value,则使用指示的初始值默认值。
- s或str——参数,默认为空字符串,或 ''。string
- i或int——整数参数,默认为0。
- f或float——浮点参数,默认为0.0。
- b或bool——布尔参数,默认为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_type “b”或“bool”的布尔参数只能是可选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_name的string参数,最后是一个名为'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_group”和“Subparsers”方法。如果需要,修改生成的代码以使用这些附加方法相对容易。
下面是使用以下命令创建的示例生成程序:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)