7
votes

Détecter quand un script python est en cours de fonctionnement de manière interactive à Ipython

Y a-t-il un moyen pour un script Python de détecter automatiquement s'il est exécuté de manière interactive ou non? En variante, peut-on détecter si Ipython est utilisé par rapport à l'exécutable régulier C python C

arrière-plan: mes scripts de python ont généralement un appel à quitter () en eux. De temps en temps, j'exécute les scripts de manière interactive pour le débogage et le profilage, généralement à Ipython. Lorsque je cours de manière interactive, je veux supprimer les appels pour sortir.

Clarification :

Supposons que j'ai un script, myscript.py, qui ressemble à: xxx < P> Parfois, je veux exécuter le script dans une session d'Ipython que j'ai déjà commencé, disant quelque chose comme: xxx

à la fin du script, la sortie () L'appel causera que Ipython accroche pendant qu'il me demande si je veux vraiment sortir. C'est une gêne mineure lors du débogage (trop mineur pour moi de m'occuper), mais il peut gâcher les résultats du profilage: l'invite de sortie est incluse dans les résultats du profil (rendant l'analyse plus difficile si je commence une session de profilage avant de partir au déjeuner) .

Qu'est-ce que je voudrais, c'est quelque chose qui me permet de modifier mon script afin qu'il ressemble à: xxx


0 commentaires

4 Réponses :


2
votes

Lorsqu'il est invoqué de manière interactive, Python exécutera le script en $ pythonstartup. Vous pouvez donc simplement avoir cette variable d'environnement invoquer un script qui définit un script global


0 commentaires

13
votes

J'ai trébuché sur ce qui suit et il semble faire le tour pour moi: xxx


1 commentaires

Qu'en est-il de la coque interactive standard que vous avez obtenue avec python ?



3
votes

docs disent que sys.ps1 code> n'existe pas en mode noninteractive. En outre, on peut utiliser sys.flags code> (pour Python 2.6+) pour détecter si nous avons utilisé python -i code>.

Ces scripts détectent si nous exécutons Mode de manière interactive, de manière non interactive et post-mortem (qui peut être attribuée au mode interactif si l'interprète Python est appelé à l'aide de Python -I code> implicitement et l'utilisateur pense qu'il a atterri dans la console "interactive"):

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

# IPython recognition is missing; test here if __IPYTHON__ exists, etc.

if hasattr(sys, 'ps1'):
    print("Running interactively.")
else:
    print("Not running interactively...")
    if sys.flags.interactive:
        print("... but I'm in interactive postmortem mode.")


0 commentaires

2
votes

J'ai comparé toutes les méthodes que j'ai trouvées et fait une table des résultats. Le meilleur semble être ceci: xxx

Entrez la description de l'image ici

si quelqu'un a d'autres scénarios qui pourraient différer, commenter et i 'll ajouter-le


1 commentaires

Mes tests étaient sur Windows 10 et "Shell" se réfère à la fois à la CMD et à Git Bash (mêmes résultats)