首页 > 解决方案 > 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。我想按方法名称调用。

标签: pythonpython-3.x

解决方案


干净的方法是使用模块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,如 in get_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() 方法创建此类子命令。


推荐阅读