Различие между “осматривает” и “интерактивные” флаги командной строки в Python

Версия CoffeeScript:

diff = (val for val in array1 when val not in array2)
6
задан Community 23 May 2017 в 12:24
поделиться

2 ответа

Согласно pythonrun.c соответствующие Py_InspectFlag и Py_InteractiveFlag используются следующим образом:

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 не выходит on SystemExit , если флаг «инспектировать» равен true.

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);
}

Если флаг «интерактивный» имеет значение false и текущий ввод не связан с терминалом, тогда python не пытается войти в «интерактивный» режим (разблокировка stdout версия для печати, отображение подсказки и т. д.). Параметр

-i включает оба флага. Флаг "inspect" также установлен, если переменная среды PYTHONINSPECT не пуста (см. main.c ).

В основном это означает, что вы установили переменную PYTHONINSPECT и запустите свой модуль, тогда python не выйдет из SystemExit (например, в конце сценария) и вместо этого показывает интерактивную подсказку (позволяющую вам проверить состояние вашего модуля (таким образом, "проверить" имя флага)).

9
ответ дан 10 December 2019 в 02:51
поделиться

man python говорит о флаге -i :

Когда скрипт передается как первый используется аргумент или опция -c, войти в интерактивный режим после выполнения сценарий или команду. Оно делает не читать файл $ PYTHONSTARTUP. Это может быть полезно для проверки глобальных переменных или трассировки стека, когда сценарий вызывает исключение.

Следовательно, -i разрешает проверку сценария в интерактивном режиме. -i подразумевает и то, и другое. Вы можете работать в интерактивном режиме без проверки (а именно, просто вызывая python без аргументов), но не наоборот.

0
ответ дан 10 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: