Does Python have an argc argument?

PythonLinuxFile IoError HandlingArguments

Python 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDan1676View Question on Stackoverflow
Solution 1 - Pythonsepp2kView Answer on Stackoverflow
Solution 2 - PythonMarcelo CantosView Answer on Stackoverflow
Solution 3 - PythonNickleView Answer on Stackoverflow
Solution 4 - PythonCees TimmermanView Answer on Stackoverflow