web-dev-qa-db-fra.com

Est-ce que Python a un argument argc?

J'ai écrit le même programme (fichier texte ouvert et contenu d'affichage) en C et C++. Je fais maintenant la même chose dans Python (sur une machine Linux).

Dans les programmes C, j'ai utilisé le code:

if (argc != 2) {
    /* exit program */
}

Question: Qu'est-ce qui est utilisé dans Python pour vérifier le nombre d'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()

Courant de sortie:

./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*)
68
Dan1676

Dans python une liste connaît sa longueur, vous pouvez donc simplement utiliser len(sys.argv) pour obtenir le nombre d'éléments dans argv.

109
sepp2k

J'utilise souvent un truc rapide pour lire un nombre fixe d'arguments à partir de la ligne de commande:

[filename] = sys.argv[1:]

in_file = open(filename)   # Don't need the "r"

Cela assignera un argument à filename et déclenchera une exception s'il n'y a pas un seul argument.

16
Marcelo Cantos

Vous feriez mieux de regarder argparse pour l'analyse des arguments.

http://docs.python.org/dev/library/argparse.html

Simplifie les choses, pas besoin de soulever des objets lourds vous-même.

8
Nickle

dir(sys) dit non. len(sys.argv) fonctionne, mais en Python, il est préférable de demander pardon que de le

#!/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()

fonctionne bien et est plus courte.

Si vous voulez quand même sortir, ce serait mieux:

#!/usr/bin/python
import sys
text = open(sys.argv[1], "r").read()
print(text)

J'utilise print() pour que cela fonctionne dans la version 2.7 ainsi que Python 3.

0
Cees Timmerman