Pass arguments from cmd to python script [duplicate]

I write my scripts in python and run them with cmd by typing in:

C:\> python script.py 

Some of my scripts contain separate algorithms and methods which are called based on a flag. Now I would like to pass the flag through cmd directly rather than having to go into the script and change the flag prior to run, I want something similar to:

C:\> python script.py -algorithm=2 

I have read that people use sys.argv for almost similar purposes however reading the manuals and forums I couldn't understand how it works.

2

3 Answers

There are a few modules specialized in parsing command line arguments: getopt, optparse and argparse. optparse is deprecated, and getopt is less powerful than argparse, so I advise you to use the latter, it'll be more helpful in the long run.

Here's a short example:

import argparse # Define the parser parser = argparse.ArgumentParser(description='Short sample app') # Declare an argument (`--algo`), saying that the # corresponding value should be stored in the `algo` # field, and using a default value if the argument # isn't given parser.add_argument('--algo', action="store", dest='algo', default=0) # Now, parse the command line arguments and store the # values in the `args` variable args = parser.parse_args() # Individual arguments can be accessed as attributes... print args.algo 

That should get you started. At worst, there's plenty of documentation available on line (say, this one for example)...

1

It might not answer your question, but some people might find it usefull (I was looking for this here):

How to send 2 args (arg1 + arg2) from cmd to python 3:

----- Send the args in test.cmd:

python "C:\Users\test.pyw" "arg1" "arg2" 

----- Retrieve the args in test.py:

print ("This is the name of the script= ", sys.argv[0]) print("Number of arguments= ", len(sys.argv)) print("all args= ", str(sys.argv)) print("arg1= ", sys.argv[1]) print("arg2= ", sys.argv[2]) 

Try using the getopt module. It can handle both short and long command line options and is implemented in a similar way in other languages (C, shell scripting, etc):

import sys, getopt def main(argv): # default algorithm: algorithm = 1 # parse command line options: try: opts, args = getopt.getopt(argv,"a:",["algorithm="]) except getopt.GetoptError: <print usage> sys.exit(2) for opt, arg in opts: if opt in ("-a", "--algorithm"): # use alternative algorithm: algorithm = arg print "Using algorithm: ", algorithm # Positional command line arguments (i.e. non optional ones) are # still available via 'args': print "Positional args: ", args if __name__ == "__main__": main(sys.argv[1:]) 

You can then pass specify a different algorithm by using the -a or --algorithm= options:

python <scriptname> -a2 # use algorithm 2 python <scriptname> --algorithm=2 # ditto 

See: getopt documentation

3

You Might Also Like