main.c revision 0df002c45b0bf2bf23bb8c0a395e86f907a94d81
1667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/*********************************************************** 2fd71b9e9d496caa510dec56a9b69966558d6ba5dGuido van RossumCopyright (c) 2000, BeOpen.com. 3fd71b9e9d496caa510dec56a9b69966558d6ba5dGuido van RossumCopyright (c) 1995-2000, Corporation for National Research Initiatives. 4fd71b9e9d496caa510dec56a9b69966558d6ba5dGuido van RossumCopyright (c) 1990-1995, Stichting Mathematisch Centrum. 5fd71b9e9d496caa510dec56a9b69966558d6ba5dGuido van RossumAll rights reserved. 6667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 7fd71b9e9d496caa510dec56a9b69966558d6ba5dGuido van RossumSee the file "Misc/COPYRIGHT" for information on usage and 8fd71b9e9d496caa510dec56a9b69966558d6ba5dGuido van Rossumredistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. 9667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum******************************************************************/ 10667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 11667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Python interpreter main program */ 12667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 13667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum#include "Python.h" 14a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum#include "osdefs.h" 15667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 1666a7013c5cc85b84347f93c0d6e61594d230985aGuido van Rossum#ifdef HAVE_UNISTD_H 1766a7013c5cc85b84347f93c0d6e61594d230985aGuido van Rossum#include <unistd.h> 1866a7013c5cc85b84347f93c0d6e61594d230985aGuido van Rossum#endif 19667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 203e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum#ifdef MS_WINDOWS 213e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum#include <fcntl.h> 223e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum#endif 233e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum 24a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum#if defined(PYOS_OS2) || defined(MS_WINDOWS) 25a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum#define PYTHONHOMEHELP "<prefix>\\lib" 26a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum#else 27620f37723ffe02f7b550aaf8386fcd62f30f6db1Fredrik Lundh#define PYTHONHOMEHELP "<prefix>/python2.0" 28a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum#endif 29a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum 30667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Interface to getopt(): */ 31667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumextern int optind; 32667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumextern char *optarg; 33667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumextern int getopt(); /* PROTO((int, char **, char *)); -- not standardized */ 34667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 35667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 36ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van Rossum/* For Py_GetArgcArgv(); set by main() */ 37667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic char **orig_argv; 38667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic int orig_argc; 39667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 40667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Short usage message (with %s for argv0) */ 41667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumstatic char *usage_line = 426b86a42c7f8786f8446d5a48db406282f18ec06aGuido van Rossum"usage: %s [option] ... [-c cmd | file | -] [arg] ...\n"; 43667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 44667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Long usage message, split into parts < 512 bytes */ 45a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossumstatic char *usage_top = "\ 46667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumOptions and arguments (and corresponding environment variables):\n\ 47667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum-d : debug output from parser (also PYTHONDEBUG=x)\n\ 48775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum-i : inspect interactively after running script, (also PYTHONINSPECT=x)\n\ 49bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossum and force prompts, even if stdin does not appear to be a terminal\n\ 50e7adf3eb6df5ce8472a41876dd3d3209025aa9fcGuido van Rossum-O : optimize generated bytecode (a tad; also PYTHONOPTIMIZE=x)\n\ 516b86a42c7f8786f8446d5a48db406282f18ec06aGuido van Rossum-OO : remove doc-strings in addition to the -O optimizations\n\ 527922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum-S : don't imply 'import site' on initialization\n\ 53bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossum-t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\ 547922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum"; 557922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossumstatic char *usage_mid = "\ 56bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossum-u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\ 57c15a9a1f98544d3258e656503f7cbcefcda92f43Guido van Rossum-U : Unicode literals: treats '...' literals like u'...'\n\ 58667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum-v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\ 59a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum-x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\ 60775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum-c cmd : program passed in as string (terminates option list)\n\ 61667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumfile : program read from script file\n\ 62667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum- : program read from stdin (default; interactive mode if a tty)\n\ 637922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum"; 647922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossumstatic char *usage_bot = "\ 65bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossumarg ...: arguments passed to program in sys.argv[1:]\n\ 66667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumOther environment variables:\n\ 67667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van RossumPYTHONSTARTUP: file executed on interactive startup (no default)\n\ 68a075ce1618c30c7d0faf4de6e84920027da40e41Guido van RossumPYTHONPATH : '%c'-separated list of directories prefixed to the\n\ 69667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum default module search path. The result is sys.path.\n\ 70a075ce1618c30c7d0faf4de6e84920027da40e41Guido van RossumPYTHONHOME : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\ 71a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum The default module search path uses %s.\n\ 72667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum"; 73667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 74667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 75667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Main program */ 76667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 779c1201fe39c21ecc238daea82460e0ae85ce11f3Guido van RossumDL_EXPORT(int) 78620f37723ffe02f7b550aaf8386fcd62f30f6db1Fredrik LundhPy_Main(int argc, char **argv) 79667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum{ 80667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int c; 81667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int sts; 82667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *command = NULL; 83667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *filename = NULL; 84667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum FILE *fp = stdin; 85667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *p; 86667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int inspect = 0; 87667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum int unbuffered = 0; 88a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum int skipfirstline = 0; 89775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum int stdin_is_interactive = 0; 90667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 91ac56b03f9a931423714ab3a0e8cfae78f81f9b85Guido van Rossum orig_argc = argc; /* For Py_GetArgcArgv() */ 92667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum orig_argv = argv; 93ed52aacb33623ac2e3d768ee3fcc205c6bd9046fGuido van Rossum 94667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if ((p = getenv("PYTHONINSPECT")) && *p != '\0') 95667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum inspect = 1; 96667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0') 97667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum unbuffered = 1; 98667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 99c15a9a1f98544d3258e656503f7cbcefcda92f43Guido van Rossum while ((c = getopt(argc, argv, "c:diOStuUvxX")) != EOF) { 100667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (c == 'c') { 101667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* -c is the last option; following arguments 102667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum that look like options are left for the 103667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum the command to interpret. */ 104667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum command = malloc(strlen(optarg) + 2); 105667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (command == NULL) 106667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_FatalError( 107667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum "not enough memory to copy -c argument"); 108667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum strcpy(command, optarg); 109667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum strcat(command, "\n"); 110667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 111667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 112667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 113667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum switch (c) { 114667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 115667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'd': 116667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_DebugFlag++; 117667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 118667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 119667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'i': 120667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum inspect++; 121775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum Py_InteractiveFlag++; 122667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 123667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 1247614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum case 'O': 1257614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum Py_OptimizeFlag++; 1267614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum break; 1277614da6b8743f1076dc68f130684b79bf4a78c0cGuido van Rossum 1287922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum case 'S': 1297922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum Py_NoSiteFlag++; 1307922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum break; 1317922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum 132bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossum case 't': 133bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossum Py_TabcheckFlag++; 134bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossum break; 135bba92ca555daeac987386a18ce16df2ea4cdebfeGuido van Rossum 136667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'u': 137667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum unbuffered++; 138667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 139667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 140667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum case 'v': 141667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum Py_VerboseFlag++; 142667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum break; 143667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 144a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum case 'x': 145a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum skipfirstline = 1; 146a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum break; 147a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum 148c15a9a1f98544d3258e656503f7cbcefcda92f43Guido van Rossum case 'U': 149c15a9a1f98544d3258e656503f7cbcefcda92f43Guido van Rossum Py_UnicodeFlag++; 150c15a9a1f98544d3258e656503f7cbcefcda92f43Guido van Rossum break; 151c15a9a1f98544d3258e656503f7cbcefcda92f43Guido van Rossum 152667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* This space reserved for other options */ 153667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 154667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum default: 155667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fprintf(stderr, usage_line, argv[0]); 156667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fprintf(stderr, usage_top); 1577922bd7382c7e22ee9f711f6554718b824ac85a4Guido van Rossum fprintf(stderr, usage_mid); 158a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum fprintf(stderr, usage_bot, 159a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum DELIM, DELIM, PYTHONHOMEHELP); 160667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum exit(2); 161667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /*NOTREACHED*/ 162667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 163667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 164667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 165667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 166775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (command == NULL && optind < argc && 167775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum strcmp(argv[optind], "-") != 0) 168775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum { 169775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum filename = argv[optind]; 170775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (filename != NULL) { 171775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if ((fp = fopen(filename, "r")) == NULL) { 172775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum fprintf(stderr, "%s: can't open file '%s'\n", 173775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum argv[0], filename); 174775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum exit(2); 175775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 176a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum else if (skipfirstline) { 177dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum int ch; 178dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum /* Push back first newline so line numbers 179dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum remain the same */ 180dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum while ((ch = getc(fp)) != EOF) { 181dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum if (ch == '\n') { 182dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum (void)ungetc(ch, fp); 183dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum break; 184dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum } 185dc8b56915534b15668d9f40d499b60934292b4d4Guido van Rossum } 186a075ce1618c30c7d0faf4de6e84920027da40e41Guido van Rossum } 187775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 188775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 189775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum 190775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum stdin_is_interactive = Py_FdIsInteractive(stdin, (char *)0); 191775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum 192667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (unbuffered) { 193f22d7e2c69f9095edc2703483ec11a3b7ff931f5Guido van Rossum#ifdef MS_WINDOWS 1943e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum _setmode(fileno(stdin), O_BINARY); 1953e7ae7ab173effc320b05a3d5a9fde7eac706771Guido van Rossum _setmode(fileno(stdout), O_BINARY); 196f22d7e2c69f9095edc2703483ec11a3b7ff931f5Guido van Rossum#endif 197667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum#ifndef MPW 19822ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#ifdef HAVE_SETVBUF 199775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdin, (char *)NULL, _IONBF, BUFSIZ); 200775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ); 201775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stderr, (char *)NULL, _IONBF, BUFSIZ); 20222ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#else /* !HAVE_SETVBUF */ 20322ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum setbuf(stdin, (char *)NULL); 20422ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum setbuf(stdout, (char *)NULL); 20522ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum setbuf(stderr, (char *)NULL); 20622ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#endif /* !HAVE_SETVBUF */ 20722ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#else /* MPW */ 208667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* On MPW (3.2) unbuffered seems to hang */ 209775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum setvbuf(stdin, (char *)NULL, _IOLBF, BUFSIZ); 210667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); 211667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum setvbuf(stderr, (char *)NULL, _IOLBF, BUFSIZ); 21222ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#endif /* MPW */ 213667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 2142a212191f8bd19c2deab88764b894dd31f39af78Guido van Rossum else if (Py_InteractiveFlag) { 215b31c7dcb43307b57917150d60a64856d5a845fa7Guido van Rossum#ifdef MS_WINDOWS 216b31c7dcb43307b57917150d60a64856d5a845fa7Guido van Rossum /* Doesn't have to have line-buffered -- use unbuffered */ 21701b7ced83452b733c4db004307292493c9dd6d73Guido van Rossum /* Any set[v]buf(stdin, ...) screws up Tkinter :-( */ 218b31c7dcb43307b57917150d60a64856d5a845fa7Guido van Rossum setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ); 21922ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#else /* !MS_WINDOWS */ 22022ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#ifdef HAVE_SETVBUF 221b31c7dcb43307b57917150d60a64856d5a845fa7Guido van Rossum setvbuf(stdin, (char *)NULL, _IOLBF, BUFSIZ); 222b31c7dcb43307b57917150d60a64856d5a845fa7Guido van Rossum setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); 22322ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#endif /* HAVE_SETVBUF */ 22422ffac1b1f8288bac7a277a8caa04ca731a54b81Guido van Rossum#endif /* !MS_WINDOWS */ 225775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum /* Leave stderr alone - it should be unbuffered anyway. */ 226775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum } 227667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 228ed52aacb33623ac2e3d768ee3fcc205c6bd9046fGuido van Rossum Py_SetProgramName(argv[0]); 229ed52aacb33623ac2e3d768ee3fcc205c6bd9046fGuido van Rossum Py_Initialize(); 230ed52aacb33623ac2e3d768ee3fcc205c6bd9046fGuido van Rossum 231667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (Py_VerboseFlag || 232129e91aa77b22db1637e9f6db9e081a4a0c9f2a1Guido van Rossum (command == NULL && filename == NULL && stdin_is_interactive)) 233fe4dfc7ce3b27b8c1fce6de2321f20ac3bd9ce93Guido van Rossum fprintf(stderr, "Python %s on %s\n%s\n", 234fe4dfc7ce3b27b8c1fce6de2321f20ac3bd9ce93Guido van Rossum Py_GetVersion(), Py_GetPlatform(), Py_GetCopyright()); 235667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 236667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 237667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (command != NULL) { 238667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum /* Backup optind and force sys.argv[0] = '-c' */ 239667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum optind--; 240667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum argv[optind] = "-c"; 241667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 242667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 243667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum PySys_SetArgv(argc-optind, argv+optind); 244667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 2453d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum if ((inspect || (command == NULL && filename == NULL)) && 2463d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum isatty(fileno(stdin))) { 2473d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum PyObject *v; 2483d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum v = PyImport_ImportModule("readline"); 2493d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum if (v == NULL) 2503d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum PyErr_Clear(); 2513d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum else 2523d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum Py_DECREF(v); 2533d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum } 2543d26cc9542a9ee4ad31e54011ac0d809ba6ff6faGuido van Rossum 255667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (command) { 256667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum sts = PyRun_SimpleString(command) != 0; 25705f7c50bfd68ed0efc68145ff029b1509685751dGuido van Rossum free(command); 258667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 259667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum else { 260775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (filename == NULL && stdin_is_interactive) { 261667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum char *startup = getenv("PYTHONSTARTUP"); 262667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (startup != NULL && startup[0] != '\0') { 263667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum FILE *fp = fopen(startup, "r"); 264667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum if (fp != NULL) { 265667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum (void) PyRun_SimpleFile(fp, startup); 266667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum PyErr_Clear(); 267667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum fclose(fp); 268667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 269667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 270667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 2710df002c45b0bf2bf23bb8c0a395e86f907a94d81Guido van Rossum sts = PyRun_AnyFileEx( 272775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum fp, 2730df002c45b0bf2bf23bb8c0a395e86f907a94d81Guido van Rossum filename == NULL ? "<stdin>" : filename, 2740df002c45b0bf2bf23bb8c0a395e86f907a94d81Guido van Rossum filename != NULL) != 0; 275667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum } 276667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 277775af9191149059bf5ebfcda6dd9bf0251ce511aGuido van Rossum if (inspect && stdin_is_interactive && 278667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum (filename != NULL || command != NULL)) 279667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum sts = PyRun_AnyFile(stdin, "<stdin>") != 0; 280667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 2815d1770ee24c7181259fbc5c427f73da037bb8eeeGuido van Rossum Py_Finalize(); 28205f7c50bfd68ed0efc68145ff029b1509685751dGuido van Rossum return sts; 283667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum} 284667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 285667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 286667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum/* Make the *original* argc/argv available to other modules. 287667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum This is rare, but it is needed by the secureware extension. */ 288667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum 289667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossumvoid 290620f37723ffe02f7b550aaf8386fcd62f30f6db1Fredrik LundhPy_GetArgcArgv(int *argc, char ***argv) 291667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum{ 292667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum *argc = orig_argc; 293667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum *argv = orig_argv; 294667d704997f26a1a22f4e981bbb3c2f8399cfc41Guido van Rossum} 295