Je passe une seule chaîne d'arguments positionnels appelée FILE, mais quand aucun argument n'est passé, je veux qu'il imprime une déclaration d'utilisation.
Chaque fois que j'écris './files.py' dans ma ligne de commande sans argument après, mon code ne fait rien. Que fais-je mal?
$./files.py $
Résultat attendu:
$ ./files.py Usage: files.py FILE
Ce que j'obtiens:
import argparse import re #-------------------------------------------------- def get_args(): """get arguments""" parser = argparse.ArgumentParser( description='Create Python script', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('FILE', help='Pass a file', type=str) return parser.parse_args() #-------------------------------------------------- def main(): """main""" args = get_args() FILE = args.FILE.IGNORECASE() if len(args) != 1: print("Usage: files.py {}".format(FILE)) sys.exit(1) # -------------------------------------------------- if __name__ == '__main__': main()
3 Réponses :
Vous n'exécutez jamais main
...
import argparse import re #-------------------------------------------------- def get_args(): """get arguments""" parser = argparse.ArgumentParser( description='Create Python script', formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('FILE', help='Pass a file', type=str) return parser.parse_args() #-------------------------------------------------- def main(): """main""" args = get_args() FILE = args.FILE.IGNORECASE() if len(args) != 1: print("Usage: files.py {}".format(FILE)) sys.exit(1) main()
J'ai ajouté main () dans mon propre code, j'ai juste oublié de l'ajouter dans cette question, mais je rencontre toujours le même problème que j'ai indiqué ci-dessus.
Ma sortie ... `~ python3 test.py` usage: test.py [-h] FILE
test.py: error: les arguments suivants sont requis: FILE
@kevin Ce comportement n'est pas reproductible avec le code que vous avez montré. Veuillez fournir un exemple complet et vérifiable.
Vous devez définir le point d'entrée de votre code. Si vous voulez appeler cela comme vous le décrivez ( ./files.py
), vous devez définir le point d'entrée principal comme ceci:
if __name__ == "__main__": """main""" args = get_args() FILE = args.FILE.IGNORECASE() if len(args) != 1: print("Usage: files.py {}".format(FILE)) sys.exit(1)
Vous devez indiquer à votre système d'exploitation que le script doit être exécuté par Python. Ajoutez un shebang comme première ligne de votre script:
parser = argparse.ArgumentParser( description='Create Python script', formatter_class=argparse.ArgumentDefaultsHelpFormatter, add_help=False, )
J'ai appelé la fonction main (), mais je n'obtiens toujours rien. De plus, je ne veux pas qu'il renvoie [-h] si c'est possible.
@kevin Avec le code que vous avez postet, il manque main
est le seul problème. Nous ne pouvons pas deviner quelles pièces supplémentaires vous n’avez pas montrées pour produire un autre problème. Veuillez modifier votre question pour inclure le code minimal requis pour reproduire votre problème.
@kevin Il vous manque peut-être un shebang, mais dans ce cas, vous devriez quand même obtenir des erreurs du Shell essayant de donner un sens à votre code Python.
Je ne pense pas que le seul problème ait été d'appeler la méthode
main ()
.Que se passe-t-il si vous fournissez des arguments?
Les mods devraient envisager d'ouvrir cette question, afin que des réponses substantielles puissent être affichées, bravo!
Comme OP l'a dit, j'ai ajouté main () dans mon propre code, j'ai juste oublié de l'ajouter dans cette question. PS. Je pourrais poster une réponse qui résoudrait très probablement son problème! :RÉ
Je ne suis toujours pas en train d'imprimer une déclaration d'utilisation. Je ne reçois rien quand je lance './files.py'. Aussi, j'ai appelé la fonction main () à la fin de mon code.
@DirtyBit Dans l'état actuel de la question, l'ajout de
main ()
résout le problème. S'il y a un problème différent, la question doit être modifiée pour préciser de quel problème il s'agit.@kevin Modifiez votre question, ajoutez la partie manquante avec la sortie que vous obtenez et que vous souhaitez.
@kevin La sortie que vous obtenez ne devrait pas être:
usage: test.py [-h] FILE test.py: erreur: les arguments suivants sont requis: FILE
?@keving Avez-vous un shebang au début de votre scénario? Sinon, obtenez-vous un message d'erreur non python, dites
import: il manque un nom de fichier d'image `import '@ error / import.c / ImportImageCommand / 1302.
?Oui, j'ai inclus '#! / Usr / bin / env python3' en haut de mon script et mon code ne renvoie aucune erreur. Je ne sais pas pourquoi il ne renvoie pas la déclaration d'utilisation. @MisterMiyagi
Obtenez-vous une sortie du script dans n'importe quelle situation? Les instructions
print
en dehors des fonctions fonctionnent-elles? Que se passe-t-il si vous fournissez des arguments?