So I have my main.py script which essentially will run certain conditional statements based on what is passed on the command-line. For example , if I use main.py -t, this will run test mode. If I run main.py -j /testdata -c 2222-22-22 -p 2222-22-22 this will run default mode and so on.
How can I stop passing in the flags on command line and be able to run my code, so rather than using the flags -j , -c and -p , I can just pass the values normally .
My code is as follows so far :
def main():
parser = argparse.ArgumentParser()
parser.add_argument("-c", "--execute-cur-date", action="store", required=False)
parser.add_argument("-p", "--execute-pre-date", action="store", required=False)
parser.add_argument("-j", "--execute-json-path", action="store", required=False)
parser.add_argument("-t", "--execute-test", action="store_true", required=False)
args = parser.parse_args()
if args.execute_test:
testing()
elif args.execute_json_path and args.execute_cur_date and args.execute_pre_date:
2 Answers 2
You may want to take a look at python-fire https://github.com/google/python-fire
import fire
def main(c=None, p=None, j=None, t=None):
print(c, p, j, t)
if c:
print("C passed")
elif p and j and t:
print("P, J, T passed")
if __name__ == "__main__":
fire.Fire(main)
you can just pass None to skip param.
python main.py None p_val j_val t_val
python main.py c_val
Comments
Use the sys module to parse the command line arguments (sys.argv will be a list of the arguments):
#!/usr/bin/env python3
import sys
# The first argument (sys.argv[0]) is the script name
print('Command line arguments:', str(sys.argv))
Running the script:
$ python3 script.py these are my arguments
Command line arguments: ['script.py', 'these', 'are', 'my', 'arguments']
You can find more examples of usage in this tutorial.
7 Comments
sys.argv[1:]), so you probably should validate them and then run some other instructions in your script. Check out this question.Explore related questions
See similar questions with these tags.
argparseacceptspositionalarguments, ones that depend entirely on position (order) rather than flags. But with those you have to provide all values, in the order defined by parser. Or you could just parse thesys.argvlist yourself.sys.argvyou just get a list of strings, and your own code has to decide which means what. Stick with the flagged version if that confuses you,-tif you aren't doing anything when those flags are present?