按照上一篇的流程
Modules/main.c里, pymain_main里pymain_init里的pymain_cmdline,是解析参数的。
初始化一个_PyCmdline,暂存参数的
line464
typedef struct {
wchar_t **argv;
int nwarnoption; /* Number of -W options */
wchar_t **warnoptions; /* -W options */
int nenv_warnoption; /* Number of PYTHONWARNINGS options */
wchar_t **env_warnoptions; /* PYTHONWARNINGS options */
int print_help; /* -h, -? options */
int print_version; /* -V option */
int bytes_warning; /* Py_BytesWarningFlag, -b */
int debug; /* Py_DebugFlag, -b, PYTHONDEBUG */
int inspect; /* Py_InspectFlag, -i, PYTHONINSPECT */
int interactive; /* Py_InteractiveFlag, -i */
int isolated; /* Py_IsolatedFlag, -I */
int optimization_level; /* Py_OptimizeFlag, -O, PYTHONOPTIMIZE */
int dont_write_bytecode; /* Py_DontWriteBytecodeFlag, -B, PYTHONDONTWRITEBYTECODE */
int no_user_site_directory; /* Py_NoUserSiteDirectory, -I, -s, PYTHONNOUSERSITE */
int no_site_import; /* Py_NoSiteFlag, -S */
int use_unbuffered_io; /* Py_UnbufferedStdioFlag, -u, PYTHONUNBUFFERED */
int verbosity; /* Py_VerboseFlag, -v, PYTHONVERBOSE */
int quiet_flag; /* Py_QuietFlag, -q */
const char *check_hash_pycs_mode; /* --check-hash-based-pycs */
#ifdef MS_WINDOWS
int legacy_windows_fs_encoding; /* Py_LegacyWindowsFSEncodingFlag,
PYTHONLEGACYWINDOWSFSENCODING */
int legacy_windows_stdio; /* Py_LegacyWindowsStdioFlag,
PYTHONLEGACYWINDOWSSTDIO */
#endif
} _PyCmdline;
然后调用cmdline_get_global_config,设置默认参数,默认参数都在 Python/pylifecycle.c 全为0.后面的cmdline_set_global_config是设置全局值的。两个是一对
然后调用pymain_cmdline_impl,里面调用pymain_read_conf,看了一下,主要在函数pymain_parse_cmdline_impl里面。其他的就不看了。
cmdline_get_env_flags是从环境拿值设置参数的。
pymain_init_core_argv是设置-c-m俩参数
没想到比较简单,没有细看,看的这些基本能达到目的了。有需要再补充
上一篇: Python源码特殊点分析1-入口函数分析
下一篇: Python源码特殊点分析3-运行导入相关
0 Responses so far.