59 votes

python et sys.argv

 if len(sys.argv) < 2:
    sys.stderr.write('Usage: sys.argv[0] ')
    sys.exit(1)


if not os.path.exists(sys.argv[1]):
    sys.stderr.write('ERROR: Database sys.argv[1] was not found!')
    sys.exit(1)
 

Ceci est une partie du code sur lequel je travaille. Dans la première partie, j'essaie de dire que si l'utilisateur ne tape pas python programname something il se fermera.

La deuxième partie, j'essaie de voir si la base de données existe. Aux deux endroits, je ne sais pas si j'ai le bon moyen d'écrire le sys.argv par stderr ou non.

Toutes les autres idées sont les bienvenues! Merci

97voto

Marius Gedminas Points 3299

En passant, vous pouvez passer le message d'erreur directement à sys.exit:

 if len(sys.argv) < 2:
    sys.exit('Usage: %s database-name' % sys.argv[0])

if not os.path.exists(sys.argv[1]):
    sys.exit('ERROR: Database %s was not found!' % sys.argv[1])
 

34voto

Greg Hewgill Points 356191

En Python, vous ne pouvez pas incorporer arbitraire des expressions Python dans les chaînes littérales et de l'avoir remplacer la valeur de la chaîne. Vous devez:

sys.stderr.write("Usage: " + sys.argv[0])

ou

sys.stderr.write("Usage: %s" % sys.argv[0])

Aussi, vous pouvez envisager d'utiliser la syntaxe suivante de l' print (pour Python antérieures à 3.x):

print >>sys.stderr, "Usage:", sys.argv[0]

À l'aide de print sans doute rend le code plus facile à lire. Python ajoute automatiquement un espace entre les arguments de l' print déclaration, il va donc y avoir un espace après les deux points dans l'exemple ci-dessus.

En Python 3.x, vous devez utiliser l' print fonction de:

print("Usage:", sys.argv[0], file=sys.stderr)

Enfin, dans la version 2.6 de Python et plus tard, vous pouvez utiliser .format:

print >>sys.stderr, "Usage: {0}".format(sys.argv[0])

31voto

John Millikin Points 86775

Je le ferais de cette façon:

 import sys

def main(argv):
    if len(argv) < 2:
        sys.stderr.write("Usage: %s <database>" % (argv[0],))
        return 1

    if not os.path.exists(argv[1]):
        sys.stderr.write("ERROR: Database %r was not found!" % (argv[1],))
        return 1

if __name__ == "__main__":
    sys.exit(main(sys.argv))
 

Cela permet d'importer main() dans d'autres modules si vous le souhaitez et simplifie le débogage, car vous pouvez choisir ce que argv devrait être.

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