!Py_NoUserSiteDirectory. */
int user_site_directory;
+ /* If non-zero, configure C standard steams (stdio, stdout,
+ stderr):
+
+ - Set O_BINARY mode on Windows.
+ - If buffered_stdio is equal to zero, make streams unbuffered.
+ Otherwise, enable streams buffering if interactive is non-zero. */
+ int configure_c_stdio;
+
/* If equal to 0, enable unbuffered mode: force the stdout and stderr
streams to be unbuffered.
.verbose = -1, \
.quiet = -1, \
.user_site_directory = -1, \
+ .configure_c_stdio = 1, \
.buffered_stdio = -1, \
._install_importlib = 1, \
.check_hash_pycs_mode = NULL, \
'verbose': 0,
'quiet': 0,
'user_site_directory': 1,
+ 'configure_c_stdio': 1,
'buffered_stdio': 1,
'stdio_encoding': GET_DEFAULT_CONFIG,
'filesystem_encoding': 'utf-8',
'filesystem_errors': self.UTF8_MODE_ERRORS,
'user_site_directory': 0,
+ 'pathconfig_warnings': 0,
}
self.check_config("init_global_config", config, preconfig)
'write_bytecode': 0,
'verbose': 1,
'quiet': 1,
+ 'configure_c_stdio': 0,
'buffered_stdio': 0,
'user_site_directory': 0,
'faulthandler': 1,
'check_hash_pycs_mode': 'always',
+ 'pathconfig_warnings': 0,
}
self.check_config("init_from_config", config, preconfig)
putenv("PYTHONUNBUFFERED=");
Py_UnbufferedStdioFlag = 1;
+ Py_FrozenFlag = 1;
+
/* FIXME: test Py_LegacyWindowsFSEncodingFlag */
/* FIXME: test Py_LegacyWindowsStdioFlag */
Py_QuietFlag = 0;
config.quiet = 1;
+ config.configure_c_stdio = 0;
+
putenv("PYTHONUNBUFFERED=");
Py_UnbufferedStdioFlag = 0;
config.buffered_stdio = 0;
config.check_hash_pycs_mode = L"always";
+ Py_FrozenFlag = 0;
+ config.pathconfig_warnings = 0;
+
err = _Py_InitializeFromConfig(&config);
if (_Py_INIT_FAILED(err)) {
_Py_ExitInitError(err);
COPY_ATTR(verbose);
COPY_ATTR(quiet);
COPY_ATTR(user_site_directory);
+ COPY_ATTR(configure_c_stdio);
COPY_ATTR(buffered_stdio);
COPY_WSTR_ATTR(filesystem_encoding);
COPY_WSTR_ATTR(filesystem_errors);
SET_ITEM_INT(verbose);
SET_ITEM_INT(quiet);
SET_ITEM_INT(user_site_directory);
+ SET_ITEM_INT(configure_c_stdio);
SET_ITEM_INT(buffered_stdio);
SET_ITEM_WSTR(stdio_encoding);
SET_ITEM_WSTR(stdio_errors);
return _Py_INIT_NO_MEMORY();
}
}
-
return _Py_INIT_OK();
}
_PyCoreConfig_Write(const _PyCoreConfig *config, _PyRuntimeState *runtime)
{
_PyCoreConfig_SetGlobalConfig(config);
- config_init_stdio(config);
+
+ if (config->configure_c_stdio) {
+ config_init_stdio(config);
+ }
/* Write the new pre-configuration into _PyRuntime */
_PyPreConfig *preconfig = &runtime->preconfig;
if (config->parse_argv < 0) {
config->parse_argv = 1;
}
+ if (config->configure_c_stdio < 0) {
+ config->configure_c_stdio = 1;
+ }
if (config->parse_argv) {
int opt_index;
* Command line arguments
* Environment variables
- * Py_xxx global configuration variables */
+ * Py_xxx global configuration variables
+
+ The only side effects are to modify config and to call _Py_SetArgcArgv(). */
_PyInitError
_PyCoreConfig_Read(_PyCoreConfig *config)
{
assert(config->quiet >= 0);
assert(config->user_site_directory >= 0);
assert(config->parse_argv >= 0);
+ assert(config->configure_c_stdio >= 0);
assert(config->buffered_stdio >= 0);
assert(config->program_name != NULL);
assert(config->program != NULL);
assert(_PyWstrList_CheckConsistency(&config->argv));
+ /* sys.argv must be non-empty: empty argv is replaced with [''] */
+ assert(config->argv.length >= 1);
assert(_PyWstrList_CheckConsistency(&config->xoptions));
assert(_PyWstrList_CheckConsistency(&config->warnoptions));
assert(_PyWstrList_CheckConsistency(&config->module_search_paths));
if (config->_install_importlib) {
+ assert(config->use_module_search_paths != 0);
+ /* don't check config->module_search_paths */
assert(config->executable != NULL);
assert(config->prefix != NULL);
assert(config->base_prefix != NULL);