Aller au contenu

Exécuter un programme depuis le terminal

Jusqu’ici, les programmes créés sont exécutés directement depuis IDLE. C’est pratique pour faire ses premiers en programmation avec Python, mais dans la pratique, les programmes Python sont exécutés depuis le terminal (aussi appelé invite de commande, console ou shell).

Le terminal est une interface textuelle qui permet d’interagir avec l’ordinateur en tapant des commandes. Ces commandes sont interprétées par le système d’exploitation pour effectuer différentes actions, comme naviguer dans les fichiers ou exécuter des programmes, par exemple ceux qu’on crée en Python.

  • Recherche cmd ou PowerShell dans le menu Démarrer
  • Ou tape Win + R, puis cmd et Entrée

Pour exécuter un fichier Python, tape python suivi du nom du fichier :

Fenêtre de terminal
python mon_programme.py

Le terminal travaille toujours dans un répertoire courant. Pour exécuter ton fichier, tu dois d’abord te placer dans le bon dossier avec cd (change directory) :

Fenêtre de terminal
cd Documents/cours-python
python devinette.py

Quand tu appelles une fonction, tu lui passes des arguments entre parenthèses :

calculer_imc(70, 1.75)

Un programme peut recevoir des arguments de la même façon. Depuis le terminal, les arguments sont spécifiés après le nom du fichier :

Fenêtre de terminal
python devinette.py 1 1000

Ici, 1 et 1000 sont les arguments du programme devinette.py.

Le module sys fournit la variable sys.argv : une liste contenant tous les arguments passés en ligne de commande.

import sys
print("Arguments reçus :", sys.argv)
print("Nombre d'arguments :", len(sys.argv))
Fenêtre de terminal
python mon_programme.py bonjour 42
Arguments reçus : ['mon_programme.py', 'bonjour', '42']
Nombre d'arguments : 3

Décomposons sys.argv :

sys.argv = ['mon_programme.py', 'bonjour', '42']
↑ ↑ ↑
sys.argv[0] sys.argv[1] sys.argv[2]
nom du fichier 1er argument 2e argument

import sys
prenom = sys.argv[1]
print("Bonjour", prenom, "!")
Fenêtre de terminal
python saluer.py Alice
Bonjour Alice !

Simple et direct : le programme prend un nom et salue.

import sys
a = float(sys.argv[1])
operation = sys.argv[2]
b = float(sys.argv[3])
match operation:
case "+":
resultat = a + b
case "-":
resultat = a - b
case "*":
resultat = a * b
case "/":
if b == 0:
print("Erreur : division par zéro")
resultat = None
else:
resultat = a / b
case _:
print("Opération non reconnue :", operation)
resultat = None
if resultat is not None:
print(a, operation, b, "=", resultat)
Fenêtre de terminal
python calculatrice.py 15 + 27
python calculatrice.py 100 / 3
python calculatrice.py 2 "*" 8
15.0 + 27.0 = 42.0
100.0 / 3.0 = 33.333333333333336
2.0 * 8.0 = 16.0

Comme pour les paramètres optionnels d’une fonction, on peut donner des valeurs par défaut aux arguments manquants. On vérifie la longueur de sys.argv :

import sys
import random
minimum = int(sys.argv[1]) if len(sys.argv) > 1 else 1
maximum = int(sys.argv[2]) if len(sys.argv) > 2 else 100
print("=== JEU DE DEVINETTES ===")
print("Nombre entre", minimum, "et", maximum)
secret = random.randint(minimum, maximum)
tentatives = 0
while True:
reponse = int(input("Ta proposition : "))
tentatives = tentatives + 1
if reponse < secret:
print("Trop petit !")
elif reponse > secret:
print("Trop grand !")
else:
print("Bravo ! Trouvé en", tentatives, "tentatives !")
break
Fenêtre de terminal
python devinette.py # Défaut : 1 à 100
python devinette.py 1 10 # Facile
python devinette.py 1 1000 # Difficile

Le patron int(sys.argv[n]) if len(sys.argv) > n else valeur_defaut est l’équivalent terminal des valeurs par défaut d’une fonction.


Dans un vrai programme, il faut prévoir le cas où l’utilisateur ne fournit pas les bons arguments.

import sys
if len(sys.argv) != 3:
print("Usage : python imc.py <poids_kg> <taille_m>")
print("Exemple : python imc.py 70 1.75")
sys.exit(1)
poids = float(sys.argv[1])
taille = float(sys.argv[2])
imc = poids / taille ** 2
print("IMC :", format(imc, ".2f"))
Fenêtre de terminal
python imc.py
Usage : python imc.py <poids_kg> <taille_m>
Exemple : python imc.py 70 1.75

Bonne pratique : quand un programme reçoit de mauvais arguments, il affiche un message d’usage (usage message) qui explique comment l’utiliser. C’est l’équivalent de la documentation d’une fonction.

if len(sys.argv) < 2:
print("Usage : python programme.py <argument1> [argument2]")
print()
print(" argument1 Description obligatoire")
print(" argument2 Description optionnelle (défaut : 10)")
sys.exit(1)

Les crochets [ ] indiquent par convention un argument optionnel.


CommandeEffet
python fichier.pyExécute le programme
python fichier.py arg1 arg2Exécute avec des arguments
sys.argvListe des arguments (toujours des str)
sys.argv[0]Nom du fichier
sys.argv[1], sys.argv[2], …Arguments passés
len(sys.argv)Nombre total d’éléments (fichier + arguments)
sys.exit(code)Terminer le programme avec un code de sortie