python calling a module that uses argparser

前端 未结 3 2003
傲寒
傲寒 2021-02-05 07:23

This is probably a silly question, but I have a python script that current takes in a bunch of arguements using argparser and I would like to load this script as a module in ano

相关标签:
3条回答
  • 2021-02-05 07:35

    One of the option is to call it as subprocess call like below:

    import subprocess
    childproc = subprocess.Popen('python childscript.py -file yourjsonfile')
    op, oe = childproc.communicate()
    print op
    
    0 讨论(0)
  • 2021-02-05 07:51

    There may be a simpler and more pythonic way to do this, but here is one possibility using the subprocess module:

    Example:

    child_script.py

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-n", "--name", help="your name")
    args = parser.parse_args()
    
    print("hello there {}").format(args.name)
    

    Then another Python script can call that script like so:

    calling_script.py:

    import subprocess
    
    # using Popen may suit better here depending on how you want to deal
    # with the output of the child_script.
    subprocess.call(["python", "child_script.py", "-n", "Donny"])
    

    Executing the above script would give the following output:

    "hello there Donny"
    
    0 讨论(0)
  • 2021-02-05 07:59

    The first argument to parse_args is a list of arguments. By default it's None which means use sys.argv. So you can arrange your script like this:

    import argparse as ap
    
    def main(raw_args=None):
        parser = ap.ArgumentParser(
            description='Gathers parameters.')
        parser.add_argument('-f', metavar='--file', type=ap.FileType('r'), action='store', dest='file',
                            required=True, help='Path to json parameter file')
        parser.add_argument('-t', metavar='--type', type=str, action='store', dest='type',
                            required=True, help='Type of parameter file.')
        parser.add_argument('-g', metavar='--group', type=str, action='store', dest='group',
                            required=False, help='Group to apply parameters to')
        # Gather the provided arguements as an array.
        args = parser.parse_args(raw_args)
        print(vars(args))
    
    
    # Run with command line arguments precisely when called directly
    # (rather than when imported)
    if __name__ == '__main__':
        main()
    

    And then elsewhere:

    from first_module import main
    
    main(['-f', '/etc/hosts', '-t', 'json'])
    

    Output:

    {'group': None, 'file': <_io.TextIOWrapper name='/etc/hosts' mode='r' encoding='UTF-8'>, 'type': 'json'}
    
    0 讨论(0)
提交回复
热议问题