Python中“inspect”和“interactive”命令行标志之间的区别

时间:2009-07-17 20:09:50

标签: python command-line interpreter

“inspect”和“interactive”标志有什么区别? sys.flags function打印它们。

根据sys.flags的文档,它们如何都有“-i”标志?

如何单独设置它们?如果我使用“python -i”,它们都将被设置 到1。

相关:

2 个答案:

答案 0 :(得分:9)

根据pythonrun.c相应的Py_InspectFlagPy_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 */
}

如果“inspect”标志为真,Python不会在SystemExit上退出。

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

如果“interactive”标志为false且当前输入未与终端关联,则python不会打扰进入“交互”模式(不缓冲标准输出,打印版本,显示提示等)。

-i选项打开两个标志。如果PYTHONINSPECT环境变量不为空,则“inspect”标志也会打开(请参阅main.c)。

基本上它意味着如果你设置PYTHONINSPECT变量并运行你的模块然后python不会退出SystemExit(例如,在脚本的末尾)并显示交互式提示而不是(允许你检查)你的模块状态(因此“检查”标志的名称))。

答案 1 :(得分:0)

man python-i标志:

  

首先传递脚本时   使用参数或-c选项,   执行后进入交互模式   脚本或命令。确实如此   没有读取$ PYTHONSTARTUP文件。   这对检查全局非常有用   变量或堆栈跟踪时a   脚本引发异常。

因此-i允许在交互式模式下检查脚本。 -i 暗示这两件事。 你可以在没有检查的情况下进行交互(即只调用python,不带参数),但反之亦然。