main.c revision 7614da6b8743f1076dc68f130684b79bf4a78c0c
1667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/*********************************************************** 2667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumCopyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, 3667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumThe Netherlands. 4667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 5667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum All Rights Reserved 6667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 7d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumPermission to use, copy, modify, and distribute this software and its 8d266eb460e20ded087d01a29da0a230e235afc40Guido van Rossumdocumentation for any purpose and without fee is hereby granted, 9667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumprovided that the above copyright notice appear in all copies and that 10d266eb460e20ded087d01a29da0a230e235afc40Guido van Rossumboth that copyright notice and this permission notice appear in 11667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumsupporting documentation, and that the names of Stichting Mathematisch 12d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumCentrum or CWI or Corporation for National Research Initiatives or 13d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumCNRI not be used in advertising or publicity pertaining to 14d266eb460e20ded087d01a29da0a230e235afc40Guido van Rossumdistribution of the software without specific, written prior 15d266eb460e20ded087d01a29da0a230e235afc40Guido van Rossumpermission. 16667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 17d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumWhile CWI is the initial source for this software, a modified version 18d266eb460e20ded087d01a29da0a230e235afc40Guido van Rossumis made available by the Corporation for National Research Initiatives 19d266eb460e20ded087d01a29da0a230e235afc40Guido van Rossum(CNRI) at the Internet address ftp://ftp.python.org. 20d266eb460e20ded087d01a29da0a230e235afc40Guido van Rossum 21d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumSTICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH 22d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumREGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF 23d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumMERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH 24d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumCENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 25d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumDAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 26d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumPROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 27d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumTORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 28d266eb460e20ded087d01a29da0a230e235afc40Guido van RossumPERFORMANCE OF THIS SOFTWARE. 29667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 30667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum******************************************************************/ 31667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 32667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Python interpreter main program */ 33667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 34667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum#include "Python.h" 35667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 3666a7013c5cc85b84347f93c0d6e61594d230985aGuido van Rossum#ifdef HAVE_UNISTD_H 3766a7013c5cc85b84347f93c0d6e61594d230985aGuido van Rossum#include <unistd.h> 3866a7013c5cc85b84347f93c0d6e61594d230985aGuido van Rossum#endif 39667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 403e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum#ifdef MS_WINDOWS 413e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum#include <fcntl.h> 423e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum#endif 433e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum 44667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Interface to getopt(): */ 45667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumextern int optind; 46667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumextern char *optarg; 47667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumextern int getopt(); /* PROTO((int, char **, char *)); -- not standardized */ 48667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 49667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 50667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Subroutines that live in their own file */ 51582646aecc3776109b784e1638849ea9c6389a55Guido van Rossumextern char *Py_GetVersion(); 52582646aecc3776109b784e1638849ea9c6389a55Guido van Rossumextern char *Py_GetCopyright(); 53667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 54667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 55ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van Rossum/* For Py_GetProgramName(); set by main() */ 56667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic char *argv0; 57667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 58ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van Rossum/* For Py_GetArgcArgv(); set by main() */ 59667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic char **orig_argv; 60667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic int orig_argc; 61667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 62667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Short usage message (with %s for argv0) */ 63667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic char *usage_line = 647614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum"usage: %s [-d] [-i] [-O] [-s] [-u] [-v] [-c cmd | file | -] [arg] ...\n"; 65667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 66667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Long usage message, split into parts < 512 bytes */ 67667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic char *usage_top = "\n\ 68667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumOptions and arguments (and corresponding environment variables):\n\ 69667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum-d : debug output from parser (also PYTHONDEBUG=x)\n\ 70775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum-i : inspect interactively after running script, (also PYTHONINSPECT=x)\n\ 71775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum and force prompts, even if stdin does not appear to be a terminal.\n\ 727614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum-O : optimize generated bytecode (a tad).\n\ 73667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum-s : suppress printing of top level expressions (also PYTHONSUPPRESS=x)\n\ 74667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum-u : unbuffered stdout and stderr (also PYTHONUNBUFFERED=x)\n\ 75667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum-v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\ 76667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum"; 77667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic char *usage_bot = "\ 78775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum-c cmd : program passed in as string (terminates option list)\n\ 79667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumfile : program read from script file\n\ 80667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum- : program read from stdin (default; interactive mode if a tty)\n\ 81667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumarg ...: arguments passed to program in sys.argv[1:]\n\ 82667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum\n\ 83667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumOther environment variables:\n\ 84667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumPYTHONSTARTUP: file executed on interactive startup (no default)\n\ 85667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumPYTHONPATH : colon-separated list of directories prefixed to the\n\ 86667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum default module search path. The result is sys.path.\n\ 87667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum"; 88667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 89667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 90667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Main program */ 91667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 92667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumint 93667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossummain(argc, argv) 94667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int argc; 95667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char **argv; 96667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum{ 97667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int c; 98667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int sts; 99667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *command = NULL; 100667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *filename = NULL; 101667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum FILE *fp = stdin; 102667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *p; 103667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int inspect = 0; 104667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int unbuffered = 0; 105775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum int stdin_is_interactive = 0; 106667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 107ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van Rossum orig_argc = argc; /* For Py_GetArgcArgv() */ 108667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum orig_argv = argv; 109ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van Rossum argv0 = argv[0]; /* For Py_GetProgramName() */ 110667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 111667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if ((p = getenv("PYTHONDEBUG")) && *p != '\0') 112667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_DebugFlag = 1; 113667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if ((p = getenv("PYTHONSUPPRESS")) && *p != '\0') 114667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_SuppressPrintingFlag = 1; 115667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if ((p = getenv("PYTHONVERBOSE")) && *p != '\0') 116667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_VerboseFlag = 1; 117667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if ((p = getenv("PYTHONINSPECT")) && *p != '\0') 118667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum inspect = 1; 119667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0') 120667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum unbuffered = 1; 121667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 1227614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum while ((c = getopt(argc, argv, "c:diOsuv")) != EOF) { 123667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (c == 'c') { 124667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* -c is the last option; following arguments 125667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum that look like options are left for the 126667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum the command to interpret. */ 127667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum command = malloc(strlen(optarg) + 2); 128667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (command == NULL) 129667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_FatalError( 130667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum "not enough memory to copy -c argument"); 131667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum strcpy(command, optarg); 132667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum strcat(command, "\n"); 133667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 134667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 135667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 136667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum switch (c) { 137667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 138667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'd': 139667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_DebugFlag++; 140667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 141667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 142667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'i': 143667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum inspect++; 144775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum Py_InteractiveFlag++; 145667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 146667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 1477614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum case 'O': 1487614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum Py_OptimizeFlag++; 1497614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum break; 1507614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum 151667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 's': 152667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_SuppressPrintingFlag++; 153667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 154667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 155667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'u': 156667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum unbuffered++; 157667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 158667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 159667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'v': 160667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_VerboseFlag++; 161667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 162667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 163667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* This space reserved for other options */ 164667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 165667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum default: 166667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fprintf(stderr, usage_line, argv[0]); 167667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fprintf(stderr, usage_top); 168667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fprintf(stderr, usage_bot); 169667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum exit(2); 170667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /*NOTREACHED*/ 171667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 172667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 173667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 174667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 175775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (command == NULL && optind < argc && 176775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum strcmp(argv[optind], "-") != 0) 177775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum { 178775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum filename = argv[optind]; 179775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (filename != NULL) { 180775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if ((fp = fopen(filename, "r")) == NULL) { 181775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum fprintf(stderr, "%s: can't open file '%s'\n", 182775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum argv[0], filename); 183775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum exit(2); 184775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 185775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 186775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 187775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum 188775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum stdin_is_interactive = Py_FdIsInteractive(stdin, (char *)0); 189775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum 190667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (unbuffered) { 191f22d7e2c69f9095edc2703483ec11a3b7ff931f5Guido van Rossum#ifdef MS_WINDOWS 1923e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum _setmode(fileno(stdin), O_BINARY); 1933e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum _setmode(fileno(stdout), O_BINARY); 194f22d7e2c69f9095edc2703483ec11a3b7ff931f5Guido van Rossum#endif 195667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum#ifndef MPW 196775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdin, (char *)NULL, _IONBF, BUFSIZ); 197775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ); 198775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stderr, (char *)NULL, _IONBF, BUFSIZ); 199667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum#else 200667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* On MPW (3.2) unbuffered seems to hang */ 201775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdin, (char *)NULL, _IOLBF, BUFSIZ); 202667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); 203667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum setvbuf(stderr, (char *)NULL, _IOLBF, BUFSIZ); 204667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum#endif 205667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 206775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum else if (stdin_is_interactive) { 207775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdin, (char *)NULL, _IOLBF, BUFSIZ); 208775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); 209775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum /* Leave stderr alone - it should be unbuffered anyway. */ 210775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 211667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 212667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (Py_VerboseFlag || 213129e91aa77b22db1637e9f6db9e081a4a0c9f2a1Guido van Rossum (command == NULL && filename == NULL && stdin_is_interactive)) 214667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fprintf(stderr, "Python %s\n%s\n", 215582646aecc3776109b784e1638849ea9c6389a55Guido van Rossum Py_GetVersion(), Py_GetCopyright()); 216667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 217667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_Initialize(); 218667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 219667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (command != NULL) { 220667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* Backup optind and force sys.argv[0] = '-c' */ 221667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum optind--; 222667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum argv[optind] = "-c"; 223667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 224667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 225667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum PySys_SetArgv(argc-optind, argv+optind); 226667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 227667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (command) { 228667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum sts = PyRun_SimpleString(command) != 0; 229667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 230667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum else { 231775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (filename == NULL && stdin_is_interactive) { 232667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *startup = getenv("PYTHONSTARTUP"); 233667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (startup != NULL && startup[0] != '\0') { 234667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum FILE *fp = fopen(startup, "r"); 235667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (fp != NULL) { 236667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum (void) PyRun_SimpleFile(fp, startup); 237667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum PyErr_Clear(); 238667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fclose(fp); 239667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 240667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 241667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 242667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum sts = PyRun_AnyFile( 243775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum fp, 244775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum filename == NULL ? "<stdin>" : filename) != 0; 245667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (filename != NULL) 246667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fclose(fp); 247667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 248667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 249775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (inspect && stdin_is_interactive && 250667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum (filename != NULL || command != NULL)) 251667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum sts = PyRun_AnyFile(stdin, "<stdin>") != 0; 252667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 253667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_Exit(sts); 254a376cc5cc86c62f912886c4002ed1a9b3b213b88Guido van Rossum return 0; /* Make gcc -Wall happy */ 255667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum} 256667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 257667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 2588026febbd678ab132b96f96314b6fd222f4082c6Guido van Rossum/* Return the program name -- some code out there needs this 2598026febbd678ab132b96f96314b6fd222f4082c6Guido van Rossum (currently _tkinter.c and importdl.c). */ 260667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 261667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumchar * 262ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van RossumPy_GetProgramName() 263667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum{ 264667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum return argv0; 265667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum} 266667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 267667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 268667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Make the *original* argc/argv available to other modules. 269667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum This is rare, but it is needed by the secureware extension. */ 270667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 271667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumvoid 272ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van RossumPy_GetArgcArgv(argc, argv) 273667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int *argc; 274667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char ***argv; 275667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum{ 276667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum *argc = orig_argc; 277667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum *argv = orig_argv; 278667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum} 279