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()
È stato utile?

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

sys.ps1 e sys.ps2 sono definiti solo in modalità interattiva.

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.

sys.flags :

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top