Python calls a module that uses argparser

This is probably a dumb question, but I have a python script that accepts a bunch of arguments using argparser, and I would like to load this script as a module in another python script, which is good. But I'm not sure how to call the module, since no function is defined; can i still call it the same way i do if i just call it from cmd?

Here is the child script:

import argparse as ap from subprocess import Popen, PIPE 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() ... Do stuff in the script 

and here is the parent script that I want to call from the child script; it also uses arg analyzer and executes some other logic

 from configuration import parameterscript as paramscript # Can I do something like this? paramscript('parameters/test.params.json', test) 

Inside the configuration directory, I also created an init .py file that is empty.

+5
source share
3 answers

The first argument to parse_args is a list of arguments. The default is None , which means using sys.argv . Therefore, you can arrange your script as follows:

 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 in another place:

 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'} 
+5
source

There may be a simpler and more pythonic way for this, but there is one possibility of 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 this script as follows:

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 will produce the following result:

 "hello there Donny" 
+2
source

One option is to call it as a subprocess call, as shown below:

 import subprocess childproc = subprocess.Popen('python childscript.py -file yourjsonfile') op, oe = childproc.communicate() print op 
+1
source

Source: https://habr.com/ru/post/1269176/


All Articles