How to add command line arguments with flags in Python3?
Solution 1
First of all thanks to Mark for 'argparse' code. I have figured out the way to take arguments from command line specified by flags. I am pasting the code below which uses a modified 'Mark' code and a small module that shows how to use the arguments collected via commandline:
import argparse
parser = argparse.ArgumentParser()
#-db DATABASE -u USERNAME -p PASSWORD -size 20000
parser.add_argument("-host", "--hostname", dest = "hostname", default = "xyz.edu", help="Server name")
parser.add_argument("-db", "--database", dest = "db", default = "ding_dong", help="Database name")
parser.add_argument("-u", "--username",dest ="username", help="User name")
parser.add_argument("-p", "--password",dest = "password", help="Password")
parser.add_argument("-size", "--binsize",dest = "binsize", help="Size", type=int)
args = parser.parse_args()
print( "Hostname {} db {} User {} Password {} size {} ".format(
args.hostname,
args.db,
args.username,
args.password,
args.binsize
))
def ConnectToDB():
print ('Trying to connect to mySQL server')
# Try to connect to the database
try:
con=sql.connect(host=args.hostname, user= args.username, passwd= args.password)
print ('\nConnected to Database\n')
# If we cannot connect to the database, send an error to the user and exit the program.
except sql.Error:
print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1]))
sys.exit(1)
return con
One of my concerns was how to use variables from arguments to the code. For that two things need to be done
- Add 'dest' to the add_argument line e.x. dest ="username" which means the value collected from the command line will be assigned to variable 'username'
- Whenever an you use such command line assigned variables from 'dest' just add 'args' before variable e.x con=sql.connect(host=args.hostname, user= args.username, passwd= args.password)
Solution 2
The python 3 library includes 3 modules for parsing the command line thus nothing extra to add to your setup.
The one you should use is argparse
import argparse
parser = argparse.ArgumentParser()
#-db DATABSE -u USERNAME -p PASSWORD -size 20
parser.add_argument("-db", "--hostname", help="Database name")
parser.add_argument("-u", "--username", help="User name")
parser.add_argument("-p", "--password", help="Password")
parser.add_argument("-size", "--size", help="Size", type=int)
args = parser.parse_args()
print( "Hostname {} User {} Password {} size {} ".format(
args.hostname,
args.username,
args.password,
args.size
))
Atul Kakrana
About me, you really want to know. A Biotech Undergraduate who graduated in Biochemistry and took a Job of Linux administrator than decided to do some Molecular Biology research got involved with Bio-Informatics. Worked hard and got two patents and decided to go for PhD in Computational Biology. That's what I am doing now. Strange, That's me. Atul Kakrana.
Updated on January 06, 2022Comments
-
Atul Kakrana over 2 years
I have to input the parameters from the command line i.e username, password, and database name. I know how to do that without using flags, by using
sys.argv
like below:##Test.py hostname = str(sys.argv[1]) username = str(sys.argv[2]) password = str(sys.argv[3]) def ConnecttoDB(): try: con=sql.connect(host=hostname, user= username, passwd= password) print ('\nConnected to Database\n') # If we cannot connect to the database, send an error to the user and exit the program. except sql.Error: print ("Error %d: %s" % (sql.Error.args[0],sql.Error.args[1])) sys.exit(1) return con
So, it could be run as:
$test.py DATABASE USERNAME PASWORD
But the problem is that I have to use 'flags'. So, the script could be run like this:
$test.py -db DATABSE -u USERNAME -p PASSWORD -size 20
How can I use flags to take arguments from the command line?
-
Atul Kakrana almost 12 yearsThanks for your reply and code. The problem I am facing now is that my code is giving error 'Undefined variables' for variables defined in above code. This is because, earlier their values were explicitly mentioned inside the script but after including the code by Mark, the values are not recognized by script. In short how do I make script take values of variables from 'argparse' module. For ex. earlier in script: hostname = 127.0.0.1, username = xyz and password = abc but now these were replaced by code above (by Mark) therefore script now says 'Undefined Variables'.
-
Atcold almost 8 yearsYou accepted your own problem solution, whereas @Mark did provide you an answer to your question. I'm not sure if this is very kind...