Dire se Python è in modalità interattiva
-
23-09-2019 - |
Domanda
In uno script Python, c'è qualche modo per dire se l'interprete è in modalità interattiva? Questo sarebbe utile in modo che, per esempio, quando si esegue una sessione interattiva di Python e importare un modulo, viene eseguito il codice leggermente diverso (ad esempio, la registrazione è disattivata).
Ho guardato dire se pitone è in modalità -i e provato il codice lì, tuttavia, che restituisce vero solo se Python è stato richiamato con il flag -i e non quando il comando utilizzato per richiamare modalità interattiva è python
senza argomenti.
Quello che voglio dire è qualcosa di simile:
if __name__=="__main__":
#do stuff
elif __pythonIsInteractive__:
#do other stuff
else:
exit()
Soluzione
__main__.__file__
non esiste nell'interprete interattivo:
import __main__ as main
print hasattr(main, '__file__')
Questo vale anche per il codice eseguito tramite python -c
, ma non python -m
.
Altri suggerimenti
TFM : Se non si specifica alcuna opzione di interfaccia, -i è implicita, sys .argv [0] è una stringa vuota ( "") e la directory corrente verrà aggiunto all'inizio del sys.path.
Se l'utente ha invocato l'interprete con python
e senza argomenti, come lei ha ricordato, si potrebbe verificare questa con if sys.argv[0] == ''
. Ciò restituisce vero anche se iniziata con python -i
, ma secondo la documentazione, sono funzionalmente la stessa.
if sys.flags.interactive:
#interactive
else:
#not interactive
I seguenti lavori con e senza l'opzione -i:
#!/usr/bin/python
import sys
# Set the interpreter bool
try:
if sys.ps1: interpreter = True
except AttributeError:
interpreter = False
if sys.flags.interactive: interpreter = True
# Use the interpreter bool
if interpreter: print 'We are in the Interpreter'
else: print 'We are running from the command line'
Ecco qualcosa che avrebbe funzionato. Mettere il seguente frammento di codice in un file, e assegnare il percorso a quel file alla variabile d'ambiente PYTHONSTARTUP
.
__pythonIsInteractive__ = None
E quindi è possibile utilizzare
if __name__=="__main__":
#do stuff
elif '__pythonIsInteractive__' in globals():
#do other stuff
else:
exit()
http://docs.python.org/tutorial/ interpreter.html # the-interattivo-startup file