python - python如何从main调用函数
问题描述
我是 python 新手,我正在探索 python 我在 1 个文件中有许多不同的函数希望将这些函数公开给客户端。这是我的 app.py 文件
import sys
def get_data(e_id, t_id):
#some code
def get_2_data(e_id, t_id)
#some code
def get_3_data(t_id)
#some code
if __name__ == '__main__':
get_data(sys.argv[1], sys.argv[2])
这里我想获取具体的函数数据。目前我正在运行 python app.py 1234 1. 在 main 下定义的函数被调用。但我想要get_3_data()数据。如何调用特定函数或有人想要获取get_2_data()。如何公开这些功能。任何建议。我不想要任何 HTTP 调用或 API。我想按方法名称调用。
解决方案
干净的方法是使用模块argparse
。
以下是如何做到这一点:
import argparse
def get_data(args):
e_id = args.e_id
t_id = args.t_id
print(f'Function get_data. e_id: {e_id}. t_id: {t_id}')
def get_data_2(args):
e_id = args.e_id
t_id = args.t_id
print(f'Function get_data_2. e_id: {e_id}. t_id: {t_id}')
def get_data_3(args):
t_id = args.t_id
print(f'Function get_data_3. t_id: {t_id}')
if __name__ == '__main__':
# Create the arguments parser
argparser = argparse.ArgumentParser()
# Create the subparsers
subparsers = argparser.add_subparsers()
# Add a parser for the first function
get_data_parser = subparsers.add_parser('get_data')
# Set the function name
get_data_parser.set_defaults(func=get_data)
# Add its arguments
get_data_parser.add_argument('e_id')
get_data_parser.add_argument('t_id')
# Add a parser for the second function
get_data_2_parser = subparsers.add_parser('get_data_2')
# Set the function name
get_data_2_parser.set_defaults(func=get_data_2)
# Add its arguments
get_data_2_parser.add_argument('e_id')
get_data_2_parser.add_argument('t_id')
# Add a parser for the third function
get_data_3_parser = subparsers.add_parser('get_data_3')
# Set the function name
get_data_3_parser.set_defaults(func=get_data_3)
# Add its arguments
get_data_3_parser.add_argument('t_id')
# Get the arguments from the comand line
args = argparser.parse_args()
# Call the selected function
args.func(args)
如本例所示,您将不得不稍微更改您的功能:
- 他们将只接受一个名为的参数
args
(在主函数中创建args = argparser.parse_args()
) - 然后,在每个函数中,您将通过其名称获取所需的参数(添加 的参数
add_argument
,如 inget_data_3_parser.add_argument('t_id')
。因此,要获取调用的参数t_id
,您将编写t_id = args.t_id
.
argparse
文档:https ://docs.python.org/3/library/argparse.html
argparse
教程:https ://docs.python.org/3/howto/argparse.html
从文档中:
许多程序将它们的功能分解为多个子命令,例如,svn 程序可以调用诸如 svn checkout、svn update 和 svn commit 之类的子命令。当程序执行需要不同类型命令行参数的多个不同功能时,以这种方式拆分功能可能是一个特别好的主意。ArgumentParser 支持使用 add_subparsers() 方法创建此类子命令。
推荐阅读
- python - 是否可以使用 Python SDK 检查特定 Azure blob 上是否存在租约?
- python - Pandas 使用列表选择列,但忽略缺少的列名
- java - Android FusedLocationProviderClient.requestLocationUpdates() 返回相同的位置坐标
- python - 基于 Arduino 的加速度计鼠标的 Python 脚本不起作用
- java - 我们可以将 Eclipse 内容助手热键“Ctrl+Space”绑定到其他键吗
- python - 使用 MIMEText 读取文本文件时出现奇怪的不需要的标题
- graphql - 实现 GraphQLModule 时 GraphQL 的 NestJS 问题
- text - 在进程仍在运行时更新 SwiftUI 中的文本
- python - 将 pb 转换为 tflite 并获取 valueerror
- r - 使用 dplyr 进行计数和求和