Differenza tra “ispezionare” e le bandiere della riga di comando “interattive” in Python
-
16-09-2019 - |
Domanda
Qual è la differenza tra le bandiere "interattivi" "ispezionare" e? Il funzione sys.flags stampe entrambi di loro.
Come entrambi possono avere flag "-i" secondo la documentazione di sys.flags?
Come posso metterli da parte? Se uso "python -i", ciascuno di essi sarà impostato a 1.
Related:
Soluzione
pythonrun.c corrispondente Py_InspectFlag
e Py_InteractiveFlag
sono utilizzati come segue:
int Py_InspectFlag; /* Needed to determine whether to exit at SystemError */
/* snip */
static void
handle_system_exit(void)
{
PyObject *exception, *value, *tb;
int exitcode = 0;
if (Py_InspectFlag)
/* Don't exit if -i flag was given. This flag is set to 0
* when entering interactive mode for inspecting. */
return;
/* snip */
}
Python non esce su SystemExit
se "ispezionare" flag è vero.
int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
/* snip */
/*
* The file descriptor fd is considered ``interactive'' if either
* a) isatty(fd) is TRUE, or
* b) the -i flag was given, and the filename associated with
* the descriptor is NULL or "<stdin>" or "???".
*/
int
Py_FdIsInteractive(FILE *fp, const char *filename)
{
if (isatty((int)fileno(fp)))
return 1;
if (!Py_InteractiveFlag)
return 0;
return (filename == NULL) ||
(strcmp(filename, "<stdin>") == 0) ||
(strcmp(filename, "???") == 0);
}
Se flag "interattivo" è falsa e ingresso di corrente non è associato con un terminale allora pitone non si preoccupa di entrare in modalità "interattivo" (stdout unbuffering, versione di stampa, mostrando rapida, ecc).
opzione -i
accende entrambe le bandiere. "Ispezionare" flag è anche se variabile di ambiente PYTHONINSPECT
non è vuota (vedi main.c ).
In pratica significa che se si imposta variabile PYTHONINSPECT
ed eseguire il modulo python allora non uscire sulla SystemExit (ad esempio, alla fine dello script) e vi mostra un prompt interattivo invece di (che consente di ispezionare il tuo stato del modulo ( in tal modo "ispezionare" nome per la bandiera)).
Altri suggerimenti
man python
dice a proposito della bandiera -i
:
Quando uno script viene passato come primo argomento o l'opzione -c viene utilizzata, entrare in modalità interattiva dopo l'esecuzione lo script o il comando. lo fa Non leggere il file $ PYTHONSTARTUP. Questo può essere utile per ispezionare globale variabili o una traccia dello stack quando un sceneggiatura solleva un'eccezione.
Quindi -i
permette ispezione di uno script in modalità interattiva. -i
implica entrambe le cose. Si può essere interattivo senza ispezionare (vale a dire, semplicemente chiamando python
, senza argomenti), ma non viceversa.