web-dev-qa-db-fra.com

débogage de shell interactif avec pycharm

Je suis nouveau chez PyCharm. J'utilise IDLE depuis longtemps. 

Il est très pratique d’utiliser des objets Python après l’exécution du script dans IDLE. Est-il possible d'utiliser des objets de script après son exécution avec un shell python interactif utilisant PyCharm?

Par exemple, nous avons un projet 'test' avec un fichier 'test.py':

a = '123'
print a

après exécution, nous pouvons obtenir le résultat:

123
Process finished with exit code 0

Comment utiliser la chaîne 'a' avec un shell interactif?

64
user1941407

Shell python intégré pour la session de débogage en cours

  1. Définissez un point d'arrêt sur la ligne d'intérêt de votre code (en cliquant sur la gouttière), puis lancez le débogage (cliquez avec le bouton droit de la souris sur l'éditeur puis sélectionnez Déboguer monfichier.py .. .).
  2. Lorsque le point d'arrêt est atteint, localisez l'onglet Debug> Console, puis cliquez sur l'onglet Afficher la ligne de commande icône (voir capture d'écran).

Cela activera un shell python (remarquez le >>> vert sur la capture d'écran) où vous pouvez accéder à toutes les variables de l'étendue actuelle et effectuer tout ce que vous faites habituellement dans le shell Python.

Dans les versions récentes de pycharm, vous obtenez un interpréteur complet ipython à la place du shell en python brut (si ipython est installé).

Enabling Python Shell for the debugged app

La fenêtre Evaluate expression

Comme alternative plus confortable, si vous n’avez besoin que d’inspecter certaines variables, membres d’accès ou méthodes d’appel sur un objet dans la portée, une fois le point d’arrêt atteint, sélectionnez une expression dans la portée actuelle, cliquez avec le bouton droit de la souris -> Évaluer Expression (ou utilisez la touche de raccourci affichée dans le menu sous Run → Evaluate Expression...), éditez si nécessaire - vous pouvez taper toute expression de python, avec saisie semi-automatique disponible - puis appuyer sur - Entrée (ou cliquez sur Evaluer ) pour inspecter le résultat. .

Les expressions multiples et multilignes sont prises en charge: pour obtenir une version multiligne de la boîte de dialogue Inspecter, cliquez sur Mode fragment de code ou sélectionnez plusieurs lignes de code dans l'éditeur, puis évaluez l'expression. Vous pouvez affecter des valeurs à des variables existantes (vous ne pouvez pas en définir de nouvelles) et exécuter des morceaux de code entiers. inspecting variables in the current scope

Souris sur les variables

Pour voir la valeur d'une variable après avoir atteint un point d'arrêt en mode débogage, placez le pointeur de la souris sur la variable (1 à 2 secondes) pour afficher la valeur dans une info-bulle.

enter image description here

L'indice contiendra un  icon - cliquez dessus pour ouvrir l'inspecteur dans une fenêtre contextuelle.

enter image description here

Pour les variables concernées, l'inspecteur est affiché dans le panneau inférieur sous Debug> Debugger.

Pour les pandas trames de données, un lien est affiché en tant que DataFrame dans le panneau de l'inspecteur de variable ou dans la fenêtre contextuelle survolée - cliquez sur le lien pour afficher le structure de données sous forme de tableau dans le panneau Affichage des données .

105
ccpizza

J'ai trouvé les réponses précédentes de Piga-fetta, Jeux Brainiac et kobejohn utiles, mais non satisfaisantes . Je propose donc ici une troisième option:

Chargement du code sélectionné dans la console (ma suggestion)

Utilisation Shift + Alt + E pour charger le code sélectionné ou la ligne dans laquelle le curseur est placé dans la console et l'exécuter immédiatement. Cela a aussi des inconvénients:

  • Vous devez sélectionner le fichier entier si vous devez exécuter le fichier entier.
  • Le code continue à s'exécuter même s'il rencontre une erreur.

Mais en retour, nous obtenons une fonctionnalité meilleure que IDLE (à mon avis): pouvoir exécuter votre code une sélection à la fois.

Lisez à ce sujet ici .

Utilisation de points d'arrêt et évaluation de l'expression (Alt-F8) (suggéré par Piga-fetta)

Ceci est très utile dans les grandes applications où nous devons déboguer à certains endroits du code, mais pas si utile pour le codage interactif. Donc, ce n'est pas ce que nous voulons.

Utilisation des outils -> Exécuter la console Python (suggéré par les jeux Brainiac et kobejohn)

C’est ce que nous voulons, mais c’est un peu lourd, surtout si le module que nous voulons exécuter ne se trouve pas dans le répertoire racine du projet.

19
elgehelge

Vous pouvez simplement utiliser la console Python dans PyCharm 2 et PyCharm 3. Et vous pouvez simplement importer, car la racine du projet est déjà ajoutée à votre PYTHONPATH:

Alors laissez-moi démontrer à travers quelques captures d'écran:

1. Créer un fichier console.py dans le répertoire racine

enter image description here

2. Ouvrir la console Python dans PyCharm

enter image description here

3. Variable d'importation à partir du fichier console.py

enter image description here

Et là, vous avez importé votre variable avec succès.

10
Games Brainiac

Laisser la ligne de commande ouverte après l'exécution

Si vous rencontrez toujours ce problème, accédez au menu Exécuter/Déboguer, choisissez Modifier la configuration, cochez la case "Afficher la ligne de commande" pour pouvoir entrer les paramètres dans la console à l'invite >>> et tester votre fonction. 

 Change setting for current file only

Configuration globale

Pour que cette modification s’applique à tous vos fichiers .py (car cette case à cocher s’applique uniquement au fichier actuel sur lequel vous travaillez), allez à: Modifier la configuration, dans la fenêtre contextuelle, une arborescence de menus à gauche, sélectionnez Valeurs par défaut. , puis Python, puis cochez la case "Afficher la ligne de commande", cela en fera le paramètre par défaut chaque fois que vous ouvrez un fichier .py (cette fonctionnalité devrait être activée par défaut!)

 Change setting for all Python files

9
Rampkins

J'ai trouvé la meilleure réponse dans: Interaction avec le programme après exécution

Citant la réponse ci-dessous:

++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

Depuis la sortie de python --help:

-i: inspecte de manière interactive après l'exécution du script; force une invite même si stdin ne semble pas être un terminal; aussi PYTHONINSPECT = x

Pour définir l'option d'interprétation dans PyCharm, allez à Exécuter | Modifier la configuration

++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

Je l'ai essayé et cela fonctionne - utilisez simplement "-i" (sans guillemets) comme "options d'interprétation". Notez que si vous ne modifiez que les valeurs par défaut dans les configurations Exécuter/Déboguer, cela n'aura peut-être pas d'effet immédiat sur les scripts que vous avez déjà exécutés auparavant; vous devrez éditer les configurations de ces scripts un par un.

6
user3308189

Non mentionné ci-dessus:

Si vous souhaitez utiliser une variable au cours de l'exécution, par exemple, Lorsque vous définissez un point d'arrêt et expérimentez ensuite l'appel de fonctions sur des objets de l'étendue actuelle, PyCharm présente une fenêtre contextuelle ' Evaluate Expression (Alt-F8) '.

Dans cette fenêtre, vous pouvez appeler des fonctions et voir la sortie. La complétion de code fonctionne également ... Cette fenêtre a également un "mode fragment de code", je cherche seulement à savoir ce que cela signifie - pouvez-vous définir des fonctions temporaires ici?.

(J'utilise PyCharm 3.0.1 Community Edition)

4
Piga-fetta

*mettre à jour

D'après votre mise à jour, je pense cette SO question fournit au moins une réponse parfaite .

Laissez-moi l’écrire ici un peu plus étape par étape que la réponse que j’ai liée.

  • Outils -> Exécuter la console Python
  • importer votre script import myscript (sans .py) (si vous voulez un nom court, utilisez import myscript as m
  • (vous devrez peut-être exécuter main() si vous avez un bloc if __== '__main__')
  • comme dans votre question, a est disponible dans myscript.a
  • si vous le souhaitez, relancez le script avec myscript = reload(myscript)

*original 

Dans PyCharm 3.0, vous pouvez effectuer les opérations suivantes:

  • Outils -> Exécuter la console Python
  • Outils -> Open Terminal (à partir duquel vous pouvez démarrer python ou faire n'importe quoi)

Est-ce ce que vous cherchez? Sinon, essayez-les et dites-moi en quoi cela diffère de ce que vous voulez.

2
KobeJohn

En plus de la suggestion que j'ai faite sur Réponse de Ramkins , vous pouvez exécuter le fichier directement avec la console en cliquant avec le bouton droit de la souris sur l'intérieur du fichier et en sélectionnant Run File in Console.

0
dexgecko