Solving problem is about exposing yourself to as many situations as possible like How to prompt for user input and read command-line arguments [closed] and practice these strategies over and over. With time, it becomes second nature and a natural way you approach any problems in general. Big or small, always start with a plan, use other strategies mentioned here till you are confident and ready to code the solution.
In this post, my aim is to share an overview the topic about How to prompt for user input and read command-line arguments [closed], which can be followed any time. Take easy to follow this discuss.
How do I have a Python script that a) can accept user input and how do I make it b) read in arguments if run from the command line?
To read user input you can try the
cmd module for easily creating a mini-command line interpreter (with help texts and autocompletion) and
input for Python 3+) for reading a line of text from the user.
text = raw_input("prompt") # Python 2 text = input("prompt") # Python 3
Command line inputs are in
sys.argv. Try this in your script:
import sys print (sys.argv)
There are two modules for parsing command line options:
(deprecated since Python 2.7, use
argparse instead) and
getopt. If you just want to input files to your script, behold the power of
The Python library reference is your friend.
var = raw_input("Please enter something: ") print "you entered", var
Or for Python 3:
var = input("Please enter something: ") print("You entered: " + var)
raw_input is no longer available in Python 3.x. But
raw_input was renamed
input, so the same functionality exists.
input_var = input("Enter something: ") print ("you entered " + input_var)
The best way to process command line arguments is the
raw_input() to get user input. If you import the
readline module your users will have line editing and history.
Careful not to use the
input function, unless you know what you’re doing. Unlike
input will accept any python expression, so it’s kinda like
This simple program helps you in understanding how to feed the user input from command line and to show help on passing invalid argument.
import argparse import sys try: parser = argparse.ArgumentParser() parser.add_argument("square", help="display a square of a given number", type=int) args = parser.parse_args() #print the square of user input from cmd line. print args.square**2 #print all the sys argument passed from cmd line including the program name. print sys.argv #print the second argument passed from cmd line; Note it starts from ZERO print sys.argv except: e = sys.exc_info() print e
1) To find the square root of 5
C:UsersDesktop>python -i emp.py 5 25 ['emp.py', '5'] 5
2) Passing invalid argument other than number
C:Usersbgh37516Desktop>python -i emp.py five usage: emp.py [-h] square emp.py: error: argument square: invalid int value: 'five' <type 'exceptions.SystemExit'>
Use ‘raw_input’ for input from a console/terminal.
if you just want a command line argument like a file name or something e.g.
$ python my_prog.py file_name.txt
then you can use sys.argv…
import sys print sys.argv
sys.argv is a list where 0 is the program name, so in the above example sys.argv would be “file_name.txt”
If you want to have full on command line options use the optparse module.
If you are running Python <2.7, you need optparse, which as the doc explains will create an interface to the command line arguments that are called when your application is run.
However, in Python ?2.7, optparse has been deprecated, and was replaced with the argparse as shown above. A quick example from the docs…
The following code is a Python program that takes a list of integers
and produces either the sum or the max:
import argparse parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('integers', metavar='N', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print args.accumulate(args.integers)