Разница между «проверять» и «интерактивные» флаги командной строки в Python - PullRequest
6 голосов
/ 18 июля 2009

В чем разница между флажками «проверять» и «интерактивно»? Функция sys.flags печатает их оба.

Как они могут иметь флаг "-i" согласно документации sys.flags?

Как я могу установить их отдельно? Если я использую "python -i", они оба будут установлены до 1.

Связанный:

Ответы [ 2 ]

9 голосов
/ 18 июля 2009

Согласно 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 не завершает работу на SystemExit, если флаг «inspect» установлен в 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);
}

Если флаг «интерактивный» имеет значение «ложь» и текущий ввод не связан с терминалом, то python не будет беспокоиться о переходе в «интерактивный» режим (вывод буфера, вывод версии для печати, отображение приглашения и т. Д.). Опция

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

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

0 голосов
/ 18 июля 2009

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

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

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

...