Exécuter python pas-à-pas

fran - 2 janv. 2024 à 14:11
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 3 janv. 2024 à 15:35

Bonjour,

Je me convertis en passant de VBA à Python. J'utilise un éditeur de texte (sublime text) qui lance les lignes de code dans l'invite de commande (cmd). Par contre, je ne vois pas comment faire du pas-à-pas (remarquablement géré par VBA). Il y a Replit mais qui ne peut être utilisé que sur serveur web et ça me dérange. Quelqu'un a-t-il une solution ? Merci


Windows / Firefox 121.0

A voir également:

2 réponses

Utilisateur anonyme
2 janv. 2024 à 14:38

Bonjour 

au lieu d'un éditeur de texte, utilise un IDE

  • vs code oubvs community 
  • pycharm
  • eclipse
  • etc

0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
2 janv. 2024 à 16:53

Bonjour,

Tu peux utiliser quelque chose comme pdb.

python3 -m pdb mon_programme.py arg1 arg2

Ainsi, pour exécuter un programme pas à pas :

  • Comme pdb est plus sympa, que son homologue gdb (utilisé en C) dont il s'inspire, il définit un breakpoint implicite au début du programme (donc pas besoin de mettre un breakpoint).
  • Si le début du programme est trop loin du passage qui t'intéresse (par exemple la fonction foo) tu peux définir breakpoint sur cette fonction avec la commande b foo.
  • La commande r (run) lance le programme jusqu'au prochain breakpoint.

Une fois le breakpoint qui t'intéresse atteint, tu peux avancer pas à pas :

  • n (next) avance d'une instruction, en restant dans au niveau de la fonction courante
  • s (step) avance à l'intérieur d'une fonction, si une fonction est appelée sur la ligne courante.

Point intéressant pour éviter de se faire des crampes dans les doigts, tu es souvent amené à faire plein de "step" ou "next" à la suite. Il faut savoir que pdb (et gdb dont il s'inspire) répète la dernière commande si tu appuies directement sur la touche Entrée. Ainsi si tu fais n entrée, entrée, entrée : cela exécute 3 fois un "next".

Exemple : 

toto.py

print("aaa")
print("bbb")
print("ccc")
python3 -m pdb toto.py
(mando@silk) (~) $ python3 -m pdb toto.py 
> /home/mando/toto.py(1)<module>()
-> print("aaa")
(Pdb) n
aaa
> /home/mando/toto.py(2)<module>()
-> print("bbb")
(Pdb) 
bbb
> /home/mando/toto.py(3)<module>()
-> print("ccc")
(Pdb) 
ccc
--Return--
> /home/mando/toto.py(3)<module>()->None
-> print("ccc")
(Pdb) 
--Return--
> <string>(1)<module>()->None
(Pdb) q

(mando@silk) (~) $

Ici je n'ai couvert qu'une utilisation simpliste de pdb, mais c'est un outil assez évolué (comme tout débogueur). Globalement, il est possible de naviguer un peu  comme tu veux. Pour plus de détails, tu peux lire ceci.

Un autre point intéressant, c'est que pdb est souvent intégré dans l'interface graphique des IDE python, et son utilisation devient ainsi bien moins laborieuse. Tu peux par exemple regarder du côté de Pycharm. Pour plus de détails, tu peux lire ceci.

Bonne chance

0
Utilisateur anonyme
2 janv. 2024 à 20:18

Bonsoir

partant du principe que fran trouve le mode pas à pas de VBA "remarquable" (perso, je dirais que le débuggueur de VBA est le pire que je connaisse, mais les gouts et les couleurs...) , je ne sais pas si lui expliquer le fonctionnement en mode ligne de commande est adapté à la question, surtout si c'est pour finir par 

c'est que pdb est souvent intégré dans l'interface graphique des IDE python, et son utilisation devient ainsi bien moins laborieuse. 

Ce que je lui ai proposé 2 heures plus tôt, avec des debbugueurs dignes de ce nom.

0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812 > Utilisateur anonyme
3 janv. 2024 à 15:35

Tout à fait, mon message avait uniquement pour but de clarifier que ce qu'il cherchait était effectivement un déboguer, et que le "vrai" est en ligne de commande, mais qu'il est intégré dans de nombreux IDE, notamment ceux dont tu parles.

0