]>
git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.10/PyMod-2.7.10/Modules/main.c
1abed3725ae731c8b75f953afa340bb3a75a7f10
1 /* Python interpreter main program */
5 #include "code.h" /* For CO_FUTURE_DIVISION */
12 #if defined(MS_WINDOWS) || defined(__CYGWIN__)
18 #if (defined(PYOS_OS2) && !defined(PYCC_GCC)) || defined(MS_WINDOWS)
19 #define PYTHONHOMEHELP "<prefix>\\lib"
21 #if defined(PYOS_OS2) && defined(PYCC_GCC)
22 #define PYTHONHOMEHELP "<prefix>/Lib"
24 #define PYTHONHOMEHELP "<prefix>/pythonX.X"
31 "Type \"help\", \"copyright\", \"credits\" or \"license\" " \
32 "for more information."
38 /* For Py_GetArgcArgv(); set by main() */
39 static char **orig_argv
;
42 /* command line options */
43 #define BASE_OPTS "3bBc:dEhiJm:OQ:RsStuUvVW:xX?"
46 #define PROGRAM_OPTS BASE_OPTS
48 /* extra option saying that we are running under a special task window
49 frontend; especially my_readline will behave different */
50 #define PROGRAM_OPTS BASE_OPTS "w"
51 /* corresponding flag */
52 extern int Py_RISCOSWimpFlag
;
55 /* Short usage message (with %s for argv0) */
56 static char *usage_line
=
57 "usage: %s [option] ... [-c cmd | -m mod | file | -] [arg] ...\n";
59 /* Long usage message, split into parts < 512 bytes */
60 static char *usage_1
= "\
61 Options and arguments (and corresponding environment variables):\n\
62 -B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x\n\
63 -c cmd : program passed in as string (terminates option list)\n\
64 -d : debug output from parser; also PYTHONDEBUG=x\n\
65 -E : ignore PYTHON* environment variables (such as PYTHONPATH)\n\
66 -h : print this help message and exit (also --help)\n\
67 -i : inspect interactively after running script; forces a prompt even\n\
69 static char *usage_2
= "\
70 if stdin does not appear to be a terminal; also PYTHONINSPECT=x\n\
71 -m mod : run library module as a script (terminates option list)\n\
72 -O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\
73 -OO : remove doc-strings in addition to the -O optimizations\n\
74 -R : use a pseudo-random salt to make hash() values of various types be\n\
75 unpredictable between separate invocations of the interpreter, as\n\
76 a defense against denial-of-service attacks\n\
77 -Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\
78 -s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\
79 -S : don't imply 'import site' on initialization\n\
80 -t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\
82 static char *usage_3
= "\
83 -u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\
84 see man page for details on internal buffering relating to '-u'\n\
85 -v : verbose (trace import statements); also PYTHONVERBOSE=x\n\
86 can be supplied multiple times to increase verbosity\n\
87 -V : print the Python version number and exit (also --version)\n\
88 -W arg : warning control; arg is action:message:category:module:lineno\n\
89 also PYTHONWARNINGS=arg\n\
90 -x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
92 static char *usage_4
= "\
93 -3 : warn about Python 3.x incompatibilities that 2to3 cannot trivially fix\n\
94 file : program read from script file\n\
95 - : program read from stdin (default; interactive mode if a tty)\n\
96 arg ...: arguments passed to program in sys.argv[1:]\n\n\
97 Other environment variables:\n\
98 PYTHONSTARTUP: file executed on interactive startup (no default)\n\
99 PYTHONPATH : '%c'-separated list of directories prefixed to the\n\
100 default module search path. The result is sys.path.\n\
102 static char *usage_5
= "\
103 PYTHONHOME : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\
104 The default module search path uses %s.\n\
105 PYTHONCASEOK : ignore case in 'import' statements (Windows).\n\
106 PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n\
108 static char *usage_6
= "\
109 PYTHONHASHSEED: if this variable is set to 'random', the effect is the same\n\
110 as specifying the -R option: a random value is used to seed the hashes of\n\
111 str, bytes and datetime objects. It can also be set to an integer\n\
112 in the range [0,4294967295] to get hash values with a predictable seed.\n\
117 usage(int exitcode
, char* program
)
119 FILE *f
= exitcode
? stderr
: stdout
;
121 fprintf(f
, usage_line
, program
);
123 fprintf(f
, "Try `python -h' for more information.\n");
128 fprintf(f
, usage_4
, DELIM
);
129 fprintf(f
, usage_5
, DELIM
, PYTHONHOMEHELP
);
134 /* suppress 'error' message */
138 /* STS$M_INHIB_MSG + SS$_ABORT */
147 static void RunStartupFile(PyCompilerFlags
*cf
)
149 char *startup
= Py_GETENV("PYTHONSTARTUP");
150 if (startup
!= NULL
&& startup
[0] != '\0') {
151 FILE *fp
= fopen(startup
, "r");
153 (void) PyRun_SimpleFileExFlags(fp
, startup
, 0, cf
);
159 PySys_WriteStderr("Could not open PYTHONSTARTUP\n");
161 PyErr_SetFromErrnoWithFilename(PyExc_IOError
,
170 static int RunModule(char *module
, int set_argv0
)
172 PyObject
*runpy
, *runmodule
, *runargs
, *result
;
173 runpy
= PyImport_ImportModule("runpy");
175 fprintf(stderr
, "Could not import runpy module\n");
178 runmodule
= PyObject_GetAttrString(runpy
, "_run_module_as_main");
179 if (runmodule
== NULL
) {
180 fprintf(stderr
, "Could not access runpy._run_module_as_main\n");
184 runargs
= Py_BuildValue("(si)", module
, set_argv0
);
185 if (runargs
== NULL
) {
187 "Could not create arguments for runpy._run_module_as_main\n");
189 Py_DECREF(runmodule
);
192 result
= PyObject_Call(runmodule
, runargs
, NULL
);
193 if (result
== NULL
) {
197 Py_DECREF(runmodule
);
199 if (result
== NULL
) {
206 static int RunMainFromImporter(char *filename
)
208 PyObject
*argv0
= NULL
, *importer
= NULL
;
210 if ((argv0
= PyString_FromString(filename
)) &&
211 (importer
= PyImport_GetImporter(argv0
)) &&
212 (importer
->ob_type
!= &PyNullImporter_Type
))
214 /* argv0 is usable as an import source, so
215 put it in sys.path[0] and import __main__ */
216 PyObject
*sys_path
= NULL
;
217 if ((sys_path
= PySys_GetObject("path")) &&
218 !PyList_SetItem(sys_path
, 0, argv0
))
223 return RunModule("__main__", 0) != 0;
227 Py_XDECREF(importer
);
228 if (PyErr_Occurred()) {
239 Py_Main(int argc
, char **argv
)
243 char *command
= NULL
;
244 char *filename
= NULL
;
249 int skipfirstline
= 0;
250 int stdin_is_interactive
= 0;
253 int saw_unbuffered_flag
= 0;
258 orig_argc
= argc
; /* For Py_GetArgcArgv() */
262 Py_RISCOSWimpFlag
= 0;
265 /* Hash randomization needed early for all string operations
266 (including -W and -X options). */
267 _PyOS_opterr
= 0; /* prevent printing the error in 1st pass */
268 while ((c
= _PyOS_GetOpt(argc
, argv
, PROGRAM_OPTS
)) != EOF
) {
269 if (c
== 'm' || c
== 'c') {
270 /* -c / -m is the last option: following arguments are
271 not interpreter options. */
276 Py_IgnoreEnvironmentFlag
++;
279 Py_HashRandomizationFlag
++;
283 /* The variable is only tested for existence here; _PyRandom_Init will
284 check its value further. */
285 if (!Py_HashRandomizationFlag
&&
286 (p
= Py_GETENV("PYTHONHASHSEED")) && *p
!= '\0')
287 Py_HashRandomizationFlag
= 1;
291 PySys_ResetWarnOptions();
294 while ((c
= _PyOS_GetOpt(argc
, argv
, PROGRAM_OPTS
)) != EOF
) {
296 /* -c is the last option; following arguments
297 that look like options are left for the
298 command to interpret. */
299 command
= (char *)malloc(strlen(_PyOS_optarg
) + 2);
302 "not enough memory to copy -c argument");
303 strcpy(command
, _PyOS_optarg
);
304 strcat(command
, "\n");
309 /* -m is the last option; following arguments
310 that look like options are left for the
311 module to interpret. */
312 module
= (char *)malloc(strlen(_PyOS_optarg
) + 2);
315 "not enough memory to copy -m argument");
316 strcpy(module
, _PyOS_optarg
);
322 Py_BytesWarningFlag
++;
330 Py_Py3kWarningFlag
++;
331 if (!Py_DivisionWarningFlag
)
332 Py_DivisionWarningFlag
= 1;
336 if (strcmp(_PyOS_optarg
, "old") == 0) {
337 Py_DivisionWarningFlag
= 0;
340 if (strcmp(_PyOS_optarg
, "warn") == 0) {
341 Py_DivisionWarningFlag
= 1;
344 if (strcmp(_PyOS_optarg
, "warnall") == 0) {
345 Py_DivisionWarningFlag
= 2;
348 if (strcmp(_PyOS_optarg
, "new") == 0) {
349 /* This only affects __main__ */
350 cf
.cf_flags
|= CO_FUTURE_DIVISION
;
351 /* And this tells the eval loop to treat
352 BINARY_DIVIDE as BINARY_TRUE_DIVIDE */
357 "-Q option should be `-Qold', "
358 "`-Qwarn', `-Qwarnall', or `-Qnew' only\n");
359 return usage(2, argv
[0]);
364 Py_InteractiveFlag
++;
367 /* case 'J': reserved for Jython */
374 Py_DontWriteBytecodeFlag
++;
378 Py_NoUserSiteDirectory
++;
386 /* Already handled above */
395 saw_unbuffered_flag
= 1;
404 Py_RISCOSWimpFlag
= 1;
412 /* case 'X': reserved for implementation-specific arguments */
426 PySys_AddWarnOption(_PyOS_optarg
);
430 /* Already handled above */
433 /* This space reserved for other options */
436 return usage(2, argv
[0]);
443 return usage(0, argv
[0]);
446 fprintf(stderr
, "Python %s\n", PY_VERSION
);
450 if (Py_Py3kWarningFlag
&& !Py_TabcheckFlag
)
451 /* -3 implies -t (but not -tt) */
454 if (!Py_InspectFlag
&&
455 (p
= Py_GETENV("PYTHONINSPECT")) && *p
!= '\0')
457 if (!saw_unbuffered_flag
&&
458 (p
= Py_GETENV("PYTHONUNBUFFERED")) && *p
!= '\0')
461 if (!Py_NoUserSiteDirectory
&&
462 (p
= Py_GETENV("PYTHONNOUSERSITE")) && *p
!= '\0')
463 Py_NoUserSiteDirectory
= 1;
465 if ((p
= Py_GETENV("PYTHONWARNINGS")) && *p
!= '\0') {
468 buf
= (char *)malloc(strlen(p
) + 1);
471 "not enough memory to copy PYTHONWARNINGS");
473 for (warning
= strtok(buf
, ",");
475 warning
= strtok(NULL
, ","))
476 PySys_AddWarnOption(warning
);
480 if (command
== NULL
&& module
== NULL
&& _PyOS_optind
< argc
&&
481 strcmp(argv
[_PyOS_optind
], "-") != 0)
484 filename
= decc$
translate_vms(argv
[_PyOS_optind
]);
485 if (filename
== (char *)0 || filename
== (char *)-1)
486 filename
= argv
[_PyOS_optind
];
489 filename
= argv
[_PyOS_optind
];
493 stdin_is_interactive
= Py_FdIsInteractive(stdin
, (char *)0);
496 #if defined(MS_WINDOWS) || defined(__CYGWIN__)
497 _setmode(fileno(stdin
), O_BINARY
);
498 _setmode(fileno(stdout
), O_BINARY
);
501 setvbuf(stdin
, (char *)NULL
, _IONBF
, BUFSIZ
);
502 setvbuf(stdout
, (char *)NULL
, _IONBF
, BUFSIZ
);
503 setvbuf(stderr
, (char *)NULL
, _IONBF
, BUFSIZ
);
504 #else /* !HAVE_SETVBUF */
505 setbuf(stdin
, (char *)NULL
);
506 setbuf(stdout
, (char *)NULL
);
507 setbuf(stderr
, (char *)NULL
);
508 #endif /* !HAVE_SETVBUF */
510 else if (Py_InteractiveFlag
) {
512 /* Doesn't have to have line-buffered -- use unbuffered */
513 /* Any set[v]buf(stdin, ...) screws up Tkinter :-( */
514 setvbuf(stdout
, (char *)NULL
, _IONBF
, BUFSIZ
);
515 #else /* !MS_WINDOWS */
517 setvbuf(stdin
, (char *)NULL
, _IOLBF
, BUFSIZ
);
518 setvbuf(stdout
, (char *)NULL
, _IOLBF
, BUFSIZ
);
519 #endif /* HAVE_SETVBUF */
520 #endif /* !MS_WINDOWS */
521 /* Leave stderr alone - it should be unbuffered anyway. */
525 setvbuf (stdout
, (char *)NULL
, _IOLBF
, BUFSIZ
);
530 /* On MacOS X, when the Python interpreter is embedded in an
531 application bundle, it gets executed by a bootstrapping script
532 that does os.execve() with an argv[0] that's different from the
533 actual Python executable. This is needed to keep the Finder happy,
534 or rather, to work around Apple's overly strict requirements of
535 the process name. However, we still need a usable sys.executable,
536 so the actual executable path is passed in an environment variable.
537 See Lib/plat-mac/bundlebuiler.py for details about the bootstrap
539 if ((p
= Py_GETENV("PYTHONEXECUTABLE")) && *p
!= '\0')
540 Py_SetProgramName(p
);
542 Py_SetProgramName(argv
[0]);
544 Py_SetProgramName(argv
[0]);
548 if (Py_VerboseFlag
||
549 (command
== NULL
&& filename
== NULL
&& module
== NULL
&& stdin_is_interactive
)) {
550 fprintf(stderr
, "Python %s on %s\n",
551 Py_GetVersion(), Py_GetPlatform());
553 fprintf(stderr
, "%s\n", COPYRIGHT
);
556 if (command
!= NULL
) {
557 /* Backup _PyOS_optind and force sys.argv[0] = '-c' */
559 argv
[_PyOS_optind
] = "-c";
562 if (module
!= NULL
) {
563 /* Backup _PyOS_optind and force sys.argv[0] = '-c'
564 so that PySys_SetArgv correctly sets sys.path[0] to ''
565 rather than looking for a file called "-m". See
566 tracker issue #8202 for details. */
568 argv
[_PyOS_optind
] = "-c";
571 PySys_SetArgv(argc
-_PyOS_optind
, argv
+_PyOS_optind
);
573 if ((Py_InspectFlag
|| (command
== NULL
&& filename
== NULL
&& module
== NULL
)) &&
574 isatty(fileno(stdin
))) {
576 v
= PyImport_ImportModule("readline");
584 sts
= PyRun_SimpleStringFlags(command
, &cf
) != 0;
587 sts
= (RunModule(module
, 1) != 0);
592 if (filename
== NULL
&& stdin_is_interactive
) {
593 Py_InspectFlag
= 0; /* do exit on SystemExit */
598 sts
= -1; /* keep track of whether we've already run __main__ */
600 if (filename
!= NULL
) {
601 sts
= RunMainFromImporter(filename
);
604 if (sts
==-1 && filename
!=NULL
) {
605 if ((fp
= fopen(filename
, "r")) == NULL
) {
606 fprintf(stderr
, "%s: can't open file '%s': [Errno %d] %s\n",
607 argv
[0], filename
, errno
, strerror(errno
));
611 else if (skipfirstline
) {
613 /* Push back first newline so line numbers
615 while ((ch
= getc(fp
)) != EOF
) {
617 (void)ungetc(ch
, fp
);
623 /* XXX: does this work on Win/Win64? (see posix_fstat) */
625 if (fstat(fileno(fp
), &sb
) == 0 &&
626 S_ISDIR(sb
.st_mode
)) {
627 fprintf(stderr
, "%s: '%s' is a directory, cannot continue\n", argv
[0], filename
);
635 /* call pending calls like signal handlers (SIGINT) */
636 if (Py_MakePendingCalls() == -1) {
640 sts
= PyRun_AnyFileExFlags(
642 filename
== NULL
? "<stdin>" : filename
,
643 filename
!= NULL
, &cf
) != 0;
649 /* Check this environment variable at the end, to give programs the
650 * opportunity to set it from Python.
652 if (!Py_InspectFlag
&&
653 (p
= Py_GETENV("PYTHONINSPECT")) && *p
!= '\0')
658 if (Py_InspectFlag
&& stdin_is_interactive
&&
659 (filename
!= NULL
|| command
!= NULL
|| module
!= NULL
)) {
662 sts
= PyRun_AnyFileFlags(stdin
, "<stdin>", &cf
) != 0;
667 if (Py_RISCOSWimpFlag
)
668 fprintf(stderr
, "\x0cq\x0c"); /* make frontend quit */
672 /* Insure++ is a memory analysis tool that aids in discovering
673 * memory leaks and other memory problems. On Python exit, the
674 * interned string dictionary is flagged as being in use at exit
675 * (which it is). Under normal circumstances, this is fine because
676 * the memory will be automatically reclaimed by the system. Under
677 * memory debugging, it's a huge source of useless noise, so we
678 * trade off slower shutdown for less distraction in the memory
681 _Py_ReleaseInternedStrings();
682 #endif /* __INSURE__ */
687 /* this is gonna seem *real weird*, but if you put some other code between
688 Py_Main() and Py_GetArgcArgv() you will need to adjust the test in the
689 while statement in Misc/gdbinit:ppystack */
691 /* Make the *original* argc/argv available to other modules.
692 This is rare, but it is needed by the secureware extension. */
695 Py_GetArgcArgv(int *argc
, char ***argv
)