python如何从main调用函数

时间:2021-03-16 11:22:14

标签: python python-3.x

我是 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。我想按方法名调用。

1 个答案:

答案 0 :(得分:1)

干净的方法是使用模块 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 的参数,就像在 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() 方法的子命令。

相关问题