Does Python have an argc argument?
PythonLinuxFile IoError HandlingArgumentsPython Problem Overview
I have written the same program (open text file and display contents) in C and C++. Now am doing the same in Python (on a Linux machine).
In the C programs I used the code:
if (argc != 2) {
/* exit program */
}
Question: What is used in Python to check the number of arguments
#!/usr/bin/python
import sys
try:
in_file = open(sys.argv[1], "r")
except:
sys.exit("ERROR. Did you make a mistake in the spelling")
text = in_file.read()
print text
in_file.close()
Current output:
./python names.txt = Displays text file (correct)
./python nam = error message: stated from the sys.ext line (correct)
./python = error message: stated from the sys.ext line (wrong: want it to be a
separate error message stating *no file name input*)
Python Solutions
Solution 1 - Python
In python a list knows its length, so you can just do len(sys.argv)
to get the number of elements in argv
.
Solution 2 - Python
I often use a quick-n-dirty trick to read a fixed number of arguments from the command-line:
[filename] = sys.argv[1:]
in_file = open(filename) # Don't need the "r"
This will assign the one argument to filename
and raise an exception if there isn't exactly one argument.
Solution 3 - Python
You're better off looking at argparse for argument parsing.
http://docs.python.org/dev/library/argparse.html
Just makes it easy, no need to do the heavy lifting yourself.
Solution 4 - Python
dir(sys)
says no. len(sys.argv)
works, but in Python it is better to ask for forgiveness than permission, so
#!/usr/bin/python
import sys
try:
in_file = open(sys.argv[1], "r")
except:
sys.exit("ERROR. Can't read supplied filename.")
text = in_file.read()
print(text)
in_file.close()
works fine and is shorter.
If you're going to exit anyway, this would be better:
#!/usr/bin/python
import sys
text = open(sys.argv[1], "r").read()
print(text)
I'm using print()
so it works in 2.7 as well as Python 3.