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. P>
Supposons que j'ai un script, myscript.py, qui ressemble à: p> à 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) . P> Qu'est-ce que je voudrais, c'est quelque chose qui me permet de modifier mon script afin qu'il ressemble à: p>
4 Réponses :
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 p>
J'ai trébuché sur ce qui suit et il semble faire le tour pour moi:
Qu'en est-il de la coque interactive standard que vous avez obtenue avec python code>?
docs disent que 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 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
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.")
J'ai comparé toutes les méthodes que j'ai trouvées et fait une table des résultats. Le meilleur semble être ceci: si quelqu'un a d'autres scénarios qui pourraient différer, commenter et i 'll ajouter-le p> p>
Mes tests étaient sur Windows 10 et "Shell" se réfère à la fois à la CMD et à Git Bash (mêmes résultats)