hcs*_*s42 6 python command-line interpreter
"inspect"和"interactive"标志有什么区别?该sys.flags功能打印他们两个.
根据sys.flags的文档,它们如何都有"-i"标志?
我该如何单独设置它们?如果我使用"python -i",它们都将设置为1.
根据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 */
}
Run Code Online (Sandbox Code Playgroud)
SystemExit
如果"inspect"标志为true,Python不会退出.
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);
}
Run Code Online (Sandbox Code Playgroud)
如果"interactive"标志为false并且当前输入未与终端关联,则python不会打扰进入"交互"模式(unbuffering stdout,打印版本,显示提示等).
-i
选项打开两个标志.如果PYTHONINSPECT
环境变量不为空,则"inspect"标志也会打开(请参阅main.c).
基本上它意味着如果您设置PYTHONINSPECT
变量并运行您的模块然后python不会退出SystemExit(例如,在脚本的末尾)并显示交互式提示而不是(允许您检查您的模块状态(因此"检查")国旗的名称)).