Introduction
Cette section présente le concept d'un programme principal ou d'un module principal.
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
Cette section présente le concept d'un programme principal ou d'un module principal.
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.
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.
__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.
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...
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()
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.
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]
...
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
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.
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.
#!
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.
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)
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
>>>
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
Félicitations ! Vous avez terminé le laboratoire du module principal. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.