Differenza tra “ispezionare” e le bandiere della riga di comando “interattive” in Python

StackOverflow https://stackoverflow.com/questions/1145428

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:

È stato utile?

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.

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