Présentation du programme principal

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Cette section présente le concept d'un programme principal ou d'un module principal.

Fonctions principales

Dans de nombreux langages de programmation, il existe le concept d'une fonction ou d'une méthode main.

// c / c++
int main(int argc, char *argv[]) {
  ...
}
// java
class myprog {
    public static void main(String args[]) {
      ...
    }
}

Il s'agit de la première fonction qui s'exécute lorsqu'une application est lancée.

Module principal de Python

Python n'a pas de fonction ou de méthode main. Au lieu de cela, il existe un module principal. Le module principal est le fichier source qui s'exécute en premier.

$ python3 prog.py
...

Quel que soit le fichier que vous donnez à l'interpréteur au démarrage, il devient main. Le nom n'a pas d'importance.

Vérification de __main__

Il est une pratique standard pour les modules exécutés en tant que script principal d'utiliser cette convention :

## prog.py
...
if __name__ == '__main__':
    ## Exécuté en tant que programme principal...
    instructions
  ...

Les instructions incluses à l'intérieur de l'instruction if deviennent le programme principal.

Programmes principaux vs. importations de bibliothèques

N'importe quel fichier Python peut être exécuté en tant que principal ou en tant qu'importation de bibliothèque :

$ python3 prog.py ## Exécuté en tant que principal
import prog   ## Exécuté en tant qu'importation de bibliothèque

Dans les deux cas, __name__ est le nom du module. Cependant, il ne sera défini sur __main__ que si le programme est exécuté en tant que principal.

Généralement, vous ne voulez pas que les instructions qui font partie du programme principal s'exécutent lors d'une importation de bibliothèque. Par conséquent, il est courant d'avoir une vérification if dans le code qui peut être utilisé de l'un ou l'autre manière.

if __name__ == '__main__':
    ## N'est pas exécuté si chargé avec import...

Modèle de programme

Voici un modèle de programme courant pour écrire un programme Python :

## prog.py
## Instructions d'importation (bibliothèques)
import modules

## Fonctions
def spam():
 ...

def blah():
 ...

## Fonction principale
def main():
 ...

if __name__ == '__main__':
    main()

Outils de ligne de commande

Python est souvent utilisé pour les outils de ligne de commande

$ python3 report.py portfolio.csv prices.csv

Cela signifie que les scripts sont exécutés à partir du shell / terminal. Les cas d'utilisation courants sont pour l'automatisation, les tâches en arrière-plan, etc.

Arguments de ligne de commande

La ligne de commande est une liste de chaînes de caractères textuelles.

$ python3 report.py portfolio.csv prices.csv

Cette liste de chaînes de caractères textuelles est trouvée dans sys.argv.

## Dans la commande bash précédente
sys.argv ## ['report.py, 'portfolio.csv', 'prices.csv']

Voici un exemple simple de traitement des arguments :

import sys

if len(sys.argv)!= 3:
    raise SystemExit(f'Usage: {sys.argv[0]} ' 'portfile pricefile')
portfile = sys.argv[1]
pricefile = sys.argv[2]
...

Entrée/Sortie standard

L'entrée/sortie standard (ou stdio) sont des fichiers qui fonctionnent de la même manière que les fichiers normaux.

sys.stdout
sys.stderr
sys.stdin

Par défaut, l'instruction print est dirigée vers sys.stdout. L'entrée est lue à partir de sys.stdin. Les traces de pile et les erreurs sont dirigées vers sys.stderr.

Notez que le stdio peut être connecté à des terminaux, des fichiers, des tubes, etc.

$ python3 prog.py > results.txt
## ou
$ cmd1 | python3 prog.py | cmd2

Variables d'environnement

Les variables d'environnement sont définies dans le shell.

$ export NAME dave
$ export RSH ssh
$ python3 prog.py

os.environ est un dictionnaire qui contient ces valeurs.

import os

name = os.environ['NAME'] ## 'dave'

Les modifications sont réflétées dans tous les sous-processus lancés ultérieurement par le programme.

Sortie du programme

La sortie du programme est gérée à travers des exceptions.

raise SystemExit
raise SystemExit(exitcode)
raise SystemExit('Informative message')

Une alternative.

import sys
sys.exit(exitcode)

Un code de sortie non nul indique une erreur.

La ligne #!

Sur Unix, la ligne #! peut lancer un script en tant que Python. Ajoutez ce qui suit à la première ligne de votre fichier de script.

#!/usr/bin/env python3
#./prog.py
...

Elle nécessite les permissions d'exécution.

$ chmod +x prog.py
## Ensuite, vous pouvez exécuter
$./prog.py
... sortie...

Nota : Le lanceur Python sous Windows recherche également la ligne #! pour indiquer la version de langage.

Modèle de script

Enfin, voici un modèle de code commun pour les programmes Python exécutés en tant que scripts de ligne de commande :

#!/usr/bin/env python3
#./prog.py

## Importations (bibliothèques)
import modules

## Fonctions
def spam():
  ...

def blah():
  ...

## Fonction principale
def main(argv):
    ## Analyser les arguments de la ligne de commande, l'environnement, etc.
  ...

if __name__ == '__main__':
    import sys
    main(sys.argv)

Exercice 3.15 : Fonctions main()

Dans le fichier report.py, ajoutez une fonction main() qui accepte une liste d'options de ligne de commande et produit la même sortie que précédemment. Vous devriez être capable de l'exécuter de manière interactive comme ceci :

>>> import report
>>> report.main(['/home/labex/project/report.py', '/home/labex/project/portfolio.csv', '/home/labex/project/prices.csv'])
      Name     Shares      Price     Change
---------- ---------- ---------- ----------
        AA        100       9.22     -22.98
       IBM         50     106.28      15.18
       CAT        150      35.46     -47.98
      MSFT        200      20.89     -30.34
        GE         95      13.48     -26.89
      MSFT         50      20.89     -44.21
       IBM        100     106.28      35.84
>>>

Modifiez le fichier pcost.py de manière à ce qu'il ait une fonction main() similaire :

>>> import pcost
>>> pcost.main(['/home/labex/project/pcost.py', '/home/labex/project/portfolio.csv'])
Total cost: 44671.15
>>>
✨ Vérifier la solution et pratiquer

Exercice 3.16 : Création de scripts

Modifiez les programmes report.py et pcost.py de manière à ce qu'ils puissent s'exécuter en tant que script sur la ligne de commande :

$./report.py portfolio.csv prices.csv
Name Shares Price Change
---------- ---------- ---------- ----------
AA 100 9.22 -22.98
IBM 50 106.28 15.18
CAT 150 35.46 -47.98
MSFT 200 20.89 -30.34
GE 95 13.48 -26.89
MSFT 50 20.89 -44.21
IBM 100 106.28 35.84

$./pcost.py portfolio.csv
Total cost: 44671.15
✨ Vérifier la solution et pratiquer

Sommaire

Félicitations ! Vous avez terminé le laboratoire du module principal. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.