84 votes

Python possède-t-il un argument argc ?

J'ai écrit le même programme (ouvrir un fichier texte et afficher son contenu) en C et C++. Maintenant je fais la même chose en 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é en 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()

Sortie de courant :

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

0 votes

Duplicata possible de python et sys.argv

0 votes

Du point de vue de l'orientation objet, je peux comprendre pourquoi argc devrait être couplé à argv. S'il s'agissait de deux objets, ils pourraient être mutés de manière interdépendante l'un de l'autre. Il est logique que argc soit un attribut de argv (et non de sys), mais je ne suis pas sûr que ce soit le cas. len est le nom d'attribut défacto que j'utiliserais. argv.__len__ est critique pour des raisons mécaniques, et puisqu'il est là, cela n'a pas beaucoup de sens de lui donner un autre nom. J'aurais probablement préféré un descripteur de proxy sys du type sys.argc = property(lambda self: len(self.argv)).__get__(sys, sys.__class__) bien que

130voto

sepp2k Points 157757

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

0 votes

Import sys # compte les arguments arguments = len(sys.argv) - 1 print ("le script est appelé avec %i arguments" % (arguments))

17voto

Marcelo Cantos Points 91211

J'utilise souvent une astuce 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"

Ceci assignera l'argument unique à filename et soulève une exception s'il n'y a pas exactement un argument.

8voto

Nickle Points 111

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

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

Cela rend les choses plus faciles, il n'est pas nécessaire de faire le gros du travail soi-même.

0voto

Cees Timmerman Points 1739

dir(sys) dit non. len(sys.argv) fonctionne, mais en Python il vaut mieux demander le pardon que la permission, donc

#!/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 court.

Si vous devez sortir de toute façon, ce serait mieux :

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

J'utilise print() afin qu'il fonctionne aussi bien en 2.7 qu'en Python 3.

0 votes

J'aime bien le principe "mieux vaut demander pardon que la permission" pour la plupart des cas en Python. Dans le cas des arguments de ligne de commande cependant, une expérience utilisateur sans doute meilleure serait d'afficher les arguments de ligne de commande qui sont requis pour le script Python si le mauvais nombre d'arguments est présent.

0 votes

@DoomGoober "nom de fichier fourni" est l'argument qu'il attend.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X