0
votes

Exécuter un script du module Python

Supposons un fichier de module Python MDL.py contient le code requis à la fin du fichier mdl.py afin qu'il puisse être utilisé comme script ainsi qu'un module importable. Maintenant, pouvons-nous exécuter Script mdl.py par la commande suivante à Python Shell? XXX


1 commentaires

L'avez-vous essayé? Que s'est-il passé? Est-ce que mdl.py contient un si __name__ == "__main __": garde pour tous les indicatifs?


3 Réponses :


1
votes

Si le module est configuré correctement, l'appel suivant doit fonctionner:

python -m mdl


2 commentaires

Quel est le -m pour?


Pour spécifier Nom du module . Lorsque vous invoquez Python, vous pouvez spécifier l'une de ces options: Python [-bbdehiioqssuvvwx?] [-C Commande | -M Nom du module | Script | -] [args]



1
votes

Oui, vous pouvez exécuter un script en l'important.

Considérez que vous avez fichier mdl.py:

print("foo")

if __name__ == "__main__":
    print("bar")


0 commentaires

1
votes

Vous pouvez le faire, mais ce n'est pas considéré comme un bon style. L'importation d'un module ne doit idéalement pas avoir d'effets secondaires, à l'exception de la création des fonctions et des objets définis dans le module disponibles.

Le moyen canonique de structurer votre module peut être vu dans l'exemple ci-dessous. P>

  • Commencez par un commentaire contenant des informations sur le fichier. Cela inclut généralement par exemple. un avis de droit d'auteur. LI>
  • ajoutez un module docstring pour décrire ce que le module fait. Li>
  • Importer quels sont les modules dont vous avez besoin. LI>
  • Définissez vos classes et vos fonctions. (Fonctions dont le nom commence par un soulignement est considéré comme "privé".) Li>
  • Pour pouvoir exécuter le module en tant que script, vous ajoutez un si __Name__ == '__Main __' code> bloc. Li> ul>

    Si vous exécutez le module sous forme de script, le nom __ __ code> du module est défini sur '__ Main __' code>. Si vous importez le module, le nom est défini sur le nom du module. P>

    Donc, si vous donnez la commande python3 pdfinfo.py foo.pdf code> Il extraire des informations de la fichier foo.pdf code>. p>

    si vous faites import pdfinfo code> dans python, il fera pdfinfo.pdfinfo code> disponible sur votre Programme. p>

    Exemple: P>

    # file: pdfinfo.py
    # vim:fileencoding=utf-8:fdm=marker:ft=python
    """Module to retrieve information from a PDF file."""
    
    import sys
    import logging
    
    
    def pdfinfo(path):
        lookups = (b'/Author', b'/Creator', b'/Producer', b'/CreationDate', b'/ModDate')
        logging.debug(f'reading {path}')
        with open(path, 'rb') as f:
            data = f.read()
        # Find the trailer, and the Info reference in the trailer
        istart = data.find(b'\ntrailer') + 8
        istart = data.find(b'/Info', istart) + 6
        iend = data.find(b'R', istart) - 1
        # Extract the Info object number and generation
        objid = data[istart:iend].strip()
        logging.debug('Info object is ' + objid.decode('ascii'))
        ostart = data.find(objid + b' obj')
        ostart = data.find(b'<<', ostart) + 3
        oend = data.find(b'>>', ostart)
        # For now.
        # return data[ostart:oend]
        info = data[ostart:oend]
        locations = [
            (data.find(item), item.decode('ascii')) for item in lookups if item in info
        ]
        locations.sort(key=lambda i: i[0])
        logging.debug('found ' + ' '.join(t[1] for t in locations))
        return locations
    
    
    # Run a test.
    def _main(argv):
        """
        Entry point for pdfinfo.py.
    
        Arguments:
            argv: command line arguments; names of PDF files to scan.
        """
        logging.basicConfig(level='DEBUG', format='%% %(levelname)s: %(message)s')
        for fn in argv:
            logging.info(pdfinfo(fn))
            print('-----------------------------------------')
            sys.stdout.flush()
    
    
    if __name__ == '__main__':
        _main(sys.argv[1:])
    


0 commentaires