In Python, can I call the main() of an imported module?

后端 未结 6 2025
时光取名叫无心
时光取名叫无心 2020-11-29 17:36

In Python I have a module myModule.py where I define a few functions and a main(), which takes a few command line arguments.

I usu

6条回答
  •  心在旅途
    2020-11-29 18:05

    Martijen's answer makes sense, but it was missing something crucial that may seem obvious to others but was hard for me to figure out.

    In the version where you use argparse, you need to have this line in the main body.

    args = parser.parse_args(args)
    

    Normally when you are using argparse just in a script you just write

    args = parser.parse_args()
    

    and parse_args find the arguments from the command line. But in this case the main function does not have access to the command line arguments, so you have to tell argparse what the arguments are.

    Here is an example

    import argparse
    import sys
    
    def x(x_center, y_center):
        print "X center:", x_center
        print "Y center:", y_center
    
    def main(args):
        parser = argparse.ArgumentParser(description="Do something.")
        parser.add_argument("-x", "--xcenter", type=float, default= 2, required=False)
        parser.add_argument("-y", "--ycenter", type=float, default= 4, required=False)
        args = parser.parse_args(args)
        x(args.xcenter, args.ycenter)
    
    if __name__ == '__main__':
        main(sys.argv[1:])
    

    Assuming you named this mytest.py To run it you can either do any of these from the command line

    python ./mytest.py -x 8
    python ./mytest.py -x 8 -y 2
    python ./mytest.py 
    

    which returns respectively

    X center: 8.0
    Y center: 4
    

    or

    X center: 8.0
    Y center: 2.0
    

    or

    X center: 2
    Y center: 4
    

    Or if you want to run from another python script you can do

    import mytest
    mytest.main(["-x","7","-y","6"]) 
    

    which returns

    X center: 7.0
    Y center: 6.0
    

提交回复
热议问题