3
votes

Comment imprimer une instruction d'utilisation lorsqu'aucun argument n'est passé?

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()


11 commentaires

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?


3 Réponses :


0
votes

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()


3 commentaires

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.



0
votes

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)


0 commentaires

0
votes

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,
)


3 commentaires

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.