Mercurial > cpython-lru_cache-weakref
annotate Modules/main.c @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | 6a79e3beb854 |
| children |
| rev | line source |
|---|---|
| 2896 | 1 /* Python interpreter main program */ |
| 2 | |
| 3 #include "Python.h" | |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
4 #include "osdefs.h" |
|
35766
34ef9f138c30
Fix a bunch of imports to use code.h instead of compile.h.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
35673
diff
changeset
|
5 #include "code.h" /* For CO_FUTURE_DIVISION */ |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
6 #include "import.h" |
| 2896 | 7 |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
8 #ifdef __VMS |
|
28169
bc2d07230934
Patch #696645: Remove VMS code with uncertain authorship.
Martin v. Löwis <martin@v.loewis.de>
parents:
26764
diff
changeset
|
9 #include <unixlib.h> |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
10 #endif |
|
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
11 |
|
24695
a989a2eaa2ac
On Cygwin, put stdin, stderr, and stdout in binary mode when the -u
Sjoerd Mullender <sjoerd@acm.org>
parents:
24480
diff
changeset
|
12 #if defined(MS_WINDOWS) || defined(__CYGWIN__) |
|
38232
aa620856e8a3
Patch #1492356: Port to Windows CE (patch set 1).
Martin v. Löwis <martin@v.loewis.de>
parents:
37655
diff
changeset
|
13 #ifdef HAVE_FCNTL_H |
|
5000
7c7a186b6d86
Fix the _setmode() patch for MS_WINDOWS: include <fcntl.h> and use
Guido van Rossum <guido@python.org>
parents:
4934
diff
changeset
|
14 #include <fcntl.h> |
|
7c7a186b6d86
Fix the _setmode() patch for MS_WINDOWS: include <fcntl.h> and use
Guido van Rossum <guido@python.org>
parents:
4934
diff
changeset
|
15 #endif |
|
38232
aa620856e8a3
Patch #1492356: Port to Windows CE (patch set 1).
Martin v. Löwis <martin@v.loewis.de>
parents:
37655
diff
changeset
|
16 #endif |
|
5000
7c7a186b6d86
Fix the _setmode() patch for MS_WINDOWS: include <fcntl.h> and use
Guido van Rossum <guido@python.org>
parents:
4934
diff
changeset
|
17 |
|
22114
c454b76d51e7
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21928
diff
changeset
|
18 #if (defined(PYOS_OS2) && !defined(PYCC_GCC)) || defined(MS_WINDOWS) |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
19 #define PYTHONHOMEHELP "<prefix>\\lib" |
|
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
20 #else |
|
22114
c454b76d51e7
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21928
diff
changeset
|
21 #if defined(PYOS_OS2) && defined(PYCC_GCC) |
|
c454b76d51e7
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21928
diff
changeset
|
22 #define PYTHONHOMEHELP "<prefix>/Lib" |
|
c454b76d51e7
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21928
diff
changeset
|
23 #else |
|
18088
86ccf93cc952
Removed the Python version from the PYTHONHOMEHELP string. It was
Marc-André Lemburg <mal@egenix.com>
parents:
17396
diff
changeset
|
24 #define PYTHONHOMEHELP "<prefix>/pythonX.X" |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
25 #endif |
|
22114
c454b76d51e7
OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents:
21928
diff
changeset
|
26 #endif |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
27 |
|
15374
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
14603
diff
changeset
|
28 #include "pygetopt.h" |
|
a826a46bae54
Move our own getopt() implementation to _PyOS_GetOpt(), and use it
Thomas Wouters <thomas@python.org>
parents:
14603
diff
changeset
|
29 |
|
14411
a707a5f17139
Instead of printing all 9 lines of copyright info, print
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
30 #define COPYRIGHT \ |
|
18692
00695551d721
Add "help" to the things one is encouraged to type for more
Guido van Rossum <guido@python.org>
parents:
18611
diff
changeset
|
31 "Type \"help\", \"copyright\", \"credits\" or \"license\" " \ |
|
00695551d721
Add "help" to the things one is encouraged to type for more
Guido van Rossum <guido@python.org>
parents:
18611
diff
changeset
|
32 "for more information." |
|
14411
a707a5f17139
Instead of printing all 9 lines of copyright info, print
Guido van Rossum <guido@python.org>
parents:
14375
diff
changeset
|
33 |
|
37655
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
34 #ifdef __cplusplus |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
35 extern "C" { |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
36 #endif |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
37 |
|
3773
6e40a2a3e6ef
New style names for getprogramname and getargcargv
Guido van Rossum <guido@python.org>
parents:
3701
diff
changeset
|
38 /* For Py_GetArgcArgv(); set by main() */ |
| 2896 | 39 static char **orig_argv; |
| 40 static int orig_argc; | |
| 41 | |
|
17396
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
42 /* command line options */ |
|
75100
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
43 #define BASE_OPTS "3bBc:dEhiJm:OQ:RsStuUvVW:xX?" |
|
17396
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
44 |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
45 #ifndef RISCOS |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
46 #define PROGRAM_OPTS BASE_OPTS |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
47 #else /*RISCOS*/ |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
48 /* extra option saying that we are running under a special task window |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
49 frontend; especially my_readline will behave different */ |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
50 #define PROGRAM_OPTS BASE_OPTS "w" |
|
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
51 /* corresponding flag */ |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
52 extern int Py_RISCOSWimpFlag; |
|
17396
beb9d2b02846
Updated version of RISCOS support. SF patch 411213 by Dietmar Schwertberger
Guido van Rossum <guido@python.org>
parents:
17125
diff
changeset
|
53 #endif /*RISCOS*/ |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
54 |
| 2896 | 55 /* Short usage message (with %s for argv0) */ |
| 56 static char *usage_line = | |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
57 "usage: %s [option] ... [-c cmd | -m mod | file | -] [arg] ...\n"; |
| 2896 | 58 |
| 59 /* Long usage message, split into parts < 512 bytes */ | |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
60 static char *usage_1 = "\ |
| 2896 | 61 Options and arguments (and corresponding environment variables):\n\ |
|
44566
599f22a349a2
Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents:
43929
diff
changeset
|
62 -B : don't write .py[co] files on import; also PYTHONDONTWRITEBYTECODE=x\n\ |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
63 -c cmd : program passed in as string (terminates option list)\n\ |
|
39841
2b05ec5df777
Rewrite help message to remove some of the parentheticals. (There were a lot of them.)
Andrew M. Kuchling <amk@amk.ca>
parents:
39840
diff
changeset
|
64 -d : debug output from parser; also PYTHONDEBUG=x\n\ |
|
44569
132d908471c8
patch #1668: clarify envvar docs; rename THREADDEBUG to PYTHONTHREADDEBUG.
Georg Brandl <georg@python.org>
parents:
44566
diff
changeset
|
65 -E : ignore PYTHON* environment variables (such as PYTHONPATH)\n\ |
|
39073
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
38778
diff
changeset
|
66 -h : print this help message and exit (also --help)\n\ |
|
39841
2b05ec5df777
Rewrite help message to remove some of the parentheticals. (There were a lot of them.)
Andrew M. Kuchling <amk@amk.ca>
parents:
39840
diff
changeset
|
67 -i : inspect interactively after running script; forces a prompt even\n\ |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
68 "; |
|
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
69 static char *usage_2 = "\ |
|
44566
599f22a349a2
Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents:
43929
diff
changeset
|
70 if stdin does not appear to be a terminal; also PYTHONINSPECT=x\n\ |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
71 -m mod : run library module as a script (terminates option list)\n\ |
|
39841
2b05ec5df777
Rewrite help message to remove some of the parentheticals. (There were a lot of them.)
Andrew M. Kuchling <amk@amk.ca>
parents:
39840
diff
changeset
|
72 -O : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x\n\ |
|
9986
d4b8ddd9a4fd
Document -OO; "unsafe" optimization that removes docstrings.
Guido van Rossum <guido@python.org>
parents:
9601
diff
changeset
|
73 -OO : remove doc-strings in addition to the -O optimizations\n\ |
|
75100
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
74 -R : use a pseudo-random salt to make hash() values of various types be\n\ |
|
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
75 unpredictable between separate invocations of the interpreter, as\n\ |
|
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
76 a defense against denial-of-service attacks\n\ |
|
19673
b3271297b984
PEP 238 documented -Qwarn as warning only for classic int or long
Guido van Rossum <guido@python.org>
parents:
19672
diff
changeset
|
77 -Q arg : division options: -Qold (default), -Qwarn, -Qwarnall, -Qnew\n\ |
|
46698
1a2dbc84bdfc
Implemented PEP 370
Christian Heimes <christian@cheimes.de>
parents:
46435
diff
changeset
|
78 -s : don't add user site directory to sys.path; also PYTHONNOUSERSITE\n\ |
|
6203
f57ae68aa3ae
Added -X option to suppress default import of site.py. Also split the
Guido van Rossum <guido@python.org>
parents:
6199
diff
changeset
|
79 -S : don't imply 'import site' on initialization\n\ |
|
7966
8c268d0e8822
Add -t option to set the Py_TabcheckFlag flag.
Guido van Rossum <guido@python.org>
parents:
7571
diff
changeset
|
80 -t : issue warnings about inconsistent tab usage (-tt: issue errors)\n\ |
|
6203
f57ae68aa3ae
Added -X option to suppress default import of site.py. Also split the
Guido van Rossum <guido@python.org>
parents:
6199
diff
changeset
|
81 "; |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
82 static char *usage_3 = "\ |
|
44566
599f22a349a2
Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents:
43929
diff
changeset
|
83 -u : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x\n\ |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
84 see man page for details on internal buffering relating to '-u'\n\ |
|
39841
2b05ec5df777
Rewrite help message to remove some of the parentheticals. (There were a lot of them.)
Andrew M. Kuchling <amk@amk.ca>
parents:
39840
diff
changeset
|
85 -v : verbose (trace import statements); also PYTHONVERBOSE=x\n\ |
|
2b05ec5df777
Rewrite help message to remove some of the parentheticals. (There were a lot of them.)
Andrew M. Kuchling <amk@amk.ca>
parents:
39840
diff
changeset
|
86 can be supplied multiple times to increase verbosity\n\ |
|
39073
c48b3a68f696
Accept long options "--help" and "--version".
Georg Brandl <georg@python.org>
parents:
38778
diff
changeset
|
87 -V : print the Python version number and exit (also --version)\n\ |
|
39841
2b05ec5df777
Rewrite help message to remove some of the parentheticals. (There were a lot of them.)
Andrew M. Kuchling <amk@amk.ca>
parents:
39840
diff
changeset
|
88 -W arg : warning control; arg is action:message:category:module:lineno\n\ |
|
60433
c0957dada5c2
#7301: add the environment variable $PYTHONWARNINGS to supplement the -W
Philip Jenvey <pjenvey@underboss.org>
parents:
59499
diff
changeset
|
89 also PYTHONWARNINGS=arg\n\ |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
90 -x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\ |
|
44566
599f22a349a2
Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents:
43929
diff
changeset
|
91 "; |
|
599f22a349a2
Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents:
43929
diff
changeset
|
92 static char *usage_4 = "\ |
|
50786
2d453b221bec
Merged revisions 68292,68344,68361,68378,68424,68426,68429-68430,68450,68457,68480-68481,68493,68495,68499,68501,68512,68514-68515 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47527
diff
changeset
|
93 -3 : warn about Python 3.x incompatibilities that 2to3 cannot trivially fix\n\ |
| 2896 | 94 file : program read from script file\n\ |
| 95 - : program read from stdin (default; interactive mode if a tty)\n\ | |
|
39841
2b05ec5df777
Rewrite help message to remove some of the parentheticals. (There were a lot of them.)
Andrew M. Kuchling <amk@amk.ca>
parents:
39840
diff
changeset
|
96 arg ...: arguments passed to program in sys.argv[1:]\n\n\ |
| 2896 | 97 Other environment variables:\n\ |
| 98 PYTHONSTARTUP: file executed on interactive startup (no default)\n\ | |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
99 PYTHONPATH : '%c'-separated list of directories prefixed to the\n\ |
| 2896 | 100 default module search path. The result is sys.path.\n\ |
|
44566
599f22a349a2
Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents:
43929
diff
changeset
|
101 "; |
|
599f22a349a2
Patch #602345 by Neal Norwitz and me: add -B option and PYTHONDONTWRITEBYTECODE envvar to skip writing bytecode.
Georg Brandl <georg@python.org>
parents:
43929
diff
changeset
|
102 static char *usage_5 = "\ |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
103 PYTHONHOME : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\ |
|
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
104 The default module search path uses %s.\n\ |
|
16731
86c7683b606a
Add a line to "python -h" output about PYTHONCASEOK.
Tim Peters <tim.peters@gmail.com>
parents:
15593
diff
changeset
|
105 PYTHONCASEOK : ignore case in 'import' statements (Windows).\n\ |
|
47413
1062b7dec95b
New environment variable PYTHONIOENCODING.
Martin v. Löwis <martin@v.loewis.de>
parents:
47294
diff
changeset
|
106 PYTHONIOENCODING: Encoding[:errors] used for stdin/stdout/stderr.\n\ |
| 2896 | 107 "; |
|
75100
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
108 static char *usage_6 = "\ |
|
75158
65d1fe86618f
Remove reST markup from --help output. Also: O(n**2) is dict construction, not single insertion.
Georg Brandl <georg@python.org>
parents:
75150
diff
changeset
|
109 PYTHONHASHSEED: if this variable is set to 'random', the effect is the same\n\ |
|
65d1fe86618f
Remove reST markup from --help output. Also: O(n**2) is dict construction, not single insertion.
Georg Brandl <georg@python.org>
parents:
75150
diff
changeset
|
110 as specifying the -R option: a random value is used to seed the hashes of\n\ |
|
65d1fe86618f
Remove reST markup from --help output. Also: O(n**2) is dict construction, not single insertion.
Georg Brandl <georg@python.org>
parents:
75150
diff
changeset
|
111 str, bytes and datetime objects. It can also be set to an integer\n\ |
|
75100
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
112 in the range [0,4294967295] to get hash values with a predictable seed.\n\ |
|
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
113 "; |
| 2896 | 114 |
| 115 | |
|
28453
df9b7cee1339
Patch #672053: Return a result from Py_Main, instead of exiting.
Martin v. Löwis <martin@v.loewis.de>
parents:
28451
diff
changeset
|
116 static int |
|
14603
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
117 usage(int exitcode, char* program) |
|
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
118 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
119 FILE *f = exitcode ? stderr : stdout; |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
120 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
121 fprintf(f, usage_line, program); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
122 if (exitcode) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
123 fprintf(f, "Try `python -h' for more information.\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
124 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
125 fputs(usage_1, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
126 fputs(usage_2, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
127 fputs(usage_3, f); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
128 fprintf(f, usage_4, DELIM); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
129 fprintf(f, usage_5, DELIM, PYTHONHOMEHELP); |
|
75100
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
130 fputs(usage_6, f); |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
131 } |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
132 #if defined(__VMS) |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
133 if (exitcode == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
134 /* suppress 'error' message */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
135 return 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
136 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
137 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
138 /* STS$M_INHIB_MSG + SS$_ABORT */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
139 return 0x1000002c; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
140 } |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
141 #else |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
142 return exitcode; |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
143 #endif |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
144 /*NOTREACHED*/ |
|
14603
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
145 } |
|
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
146 |
|
30935
5d2b0e9062d5
Patch #794400: Let PYTHONSTARTUP influence the compiler flags.
Martin v. Löwis <martin@v.loewis.de>
parents:
30723
diff
changeset
|
147 static void RunStartupFile(PyCompilerFlags *cf) |
|
5d2b0e9062d5
Patch #794400: Let PYTHONSTARTUP influence the compiler flags.
Martin v. Löwis <martin@v.loewis.de>
parents:
30723
diff
changeset
|
148 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
149 char *startup = Py_GETENV("PYTHONSTARTUP"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
150 if (startup != NULL && startup[0] != '\0') { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
151 FILE *fp = fopen(startup, "r"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
152 if (fp != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
153 (void) PyRun_SimpleFileExFlags(fp, startup, 0, cf); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
154 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
155 fclose(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
156 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
157 int save_errno; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
158 save_errno = errno; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
159 PySys_WriteStderr("Could not open PYTHONSTARTUP\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
160 errno = save_errno; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
161 PyErr_SetFromErrnoWithFilename(PyExc_IOError, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
162 startup); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
163 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
164 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
165 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
166 } |
|
30935
5d2b0e9062d5
Patch #794400: Let PYTHONSTARTUP influence the compiler flags.
Martin v. Löwis <martin@v.loewis.de>
parents:
30723
diff
changeset
|
167 } |
|
5d2b0e9062d5
Patch #794400: Let PYTHONSTARTUP influence the compiler flags.
Martin v. Löwis <martin@v.loewis.de>
parents:
30723
diff
changeset
|
168 |
|
36995
f914630f419c
Implement PEP 338 which has been marked as accepted by GvR
Nick Coghlan <ncoghlan@gmail.com>
parents:
36910
diff
changeset
|
169 |
|
43895
4cec0c6392c1
Patch #1739468: Directories and zipfiles containing __main__.py are now executable
Nick Coghlan <ncoghlan@gmail.com>
parents:
43534
diff
changeset
|
170 static int RunModule(char *module, int set_argv0) |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
171 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
172 PyObject *runpy, *runmodule, *runargs, *result; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
173 runpy = PyImport_ImportModule("runpy"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
174 if (runpy == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
175 fprintf(stderr, "Could not import runpy module\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
176 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
177 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
178 runmodule = PyObject_GetAttrString(runpy, "_run_module_as_main"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
179 if (runmodule == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
180 fprintf(stderr, "Could not access runpy._run_module_as_main\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
181 Py_DECREF(runpy); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
182 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
183 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
184 runargs = Py_BuildValue("(si)", module, set_argv0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
185 if (runargs == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
186 fprintf(stderr, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
187 "Could not create arguments for runpy._run_module_as_main\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
188 Py_DECREF(runpy); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
189 Py_DECREF(runmodule); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
190 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
191 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
192 result = PyObject_Call(runmodule, runargs, NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
193 if (result == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
194 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
195 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
196 Py_DECREF(runpy); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
197 Py_DECREF(runmodule); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
198 Py_DECREF(runargs); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
199 if (result == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
200 return -1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
201 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
202 Py_DECREF(result); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
203 return 0; |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
204 } |
|
14603
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
205 |
|
43895
4cec0c6392c1
Patch #1739468: Directories and zipfiles containing __main__.py are now executable
Nick Coghlan <ncoghlan@gmail.com>
parents:
43534
diff
changeset
|
206 static int RunMainFromImporter(char *filename) |
|
40543
d9749c3e6326
Bug #1566280: Explicitly invoke threading._shutdown from Py_Main,
Martin v. Löwis <martin@v.loewis.de>
parents:
39073
diff
changeset
|
207 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
208 PyObject *argv0 = NULL, *importer = NULL; |
|
43895
4cec0c6392c1
Patch #1739468: Directories and zipfiles containing __main__.py are now executable
Nick Coghlan <ncoghlan@gmail.com>
parents:
43534
diff
changeset
|
209 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
210 if ((argv0 = PyString_FromString(filename)) && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
211 (importer = PyImport_GetImporter(argv0)) && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
212 (importer->ob_type != &PyNullImporter_Type)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
213 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
214 /* argv0 is usable as an import source, so |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
215 put it in sys.path[0] and import __main__ */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
216 PyObject *sys_path = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
217 if ((sys_path = PySys_GetObject("path")) && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
218 !PyList_SetItem(sys_path, 0, argv0)) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
219 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
220 Py_INCREF(argv0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
221 Py_DECREF(importer); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
222 sys_path = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
223 return RunModule("__main__", 0) != 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
224 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
225 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
226 Py_XDECREF(argv0); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
227 Py_XDECREF(importer); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
228 if (PyErr_Occurred()) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
229 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
230 return 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
231 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
232 return -1; |
|
40543
d9749c3e6326
Bug #1566280: Explicitly invoke threading._shutdown from Py_Main,
Martin v. Löwis <martin@v.loewis.de>
parents:
39073
diff
changeset
|
233 } |
|
d9749c3e6326
Bug #1566280: Explicitly invoke threading._shutdown from Py_Main,
Martin v. Löwis <martin@v.loewis.de>
parents:
39073
diff
changeset
|
234 |
|
43895
4cec0c6392c1
Patch #1739468: Directories and zipfiles containing __main__.py are now executable
Nick Coghlan <ncoghlan@gmail.com>
parents:
43534
diff
changeset
|
235 |
| 2896 | 236 /* Main program */ |
| 237 | |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
24405
diff
changeset
|
238 int |
|
13482
000a1c7eb09f
- changed 1.5 to 2.0 in the help text
Fredrik Lundh <fredrik@pythonware.com>
parents:
13256
diff
changeset
|
239 Py_Main(int argc, char **argv) |
| 2896 | 240 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
241 int c; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
242 int sts; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
243 char *command = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
244 char *filename = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
245 char *module = NULL; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
246 FILE *fp = stdin; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
247 char *p; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
248 int unbuffered = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
249 int skipfirstline = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
250 int stdin_is_interactive = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
251 int help = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
252 int version = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
253 int saw_unbuffered_flag = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
254 PyCompilerFlags cf; |
| 2896 | 255 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
256 cf.cf_flags = 0; |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
257 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
258 orig_argc = argc; /* For Py_GetArgcArgv() */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
259 orig_argv = argv; |
| 2896 | 260 |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
261 #ifdef RISCOS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
262 Py_RISCOSWimpFlag = 0; |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
263 #endif |
|
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
264 |
|
75148
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
265 /* Hash randomization needed early for all string operations |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
266 (including -W and -X options). */ |
|
80565
6a79e3beb854
#16306: report only the first unknown option and add more tests. Patch by Serhiy Storchaka.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
77948
diff
changeset
|
267 _PyOS_opterr = 0; /* prevent printing the error in 1st pass */ |
|
75148
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
268 while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
269 if (c == 'm' || c == 'c') { |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
270 /* -c / -m is the last option: following arguments are |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
271 not interpreter options. */ |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
272 break; |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
273 } |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
274 switch (c) { |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
275 case 'E': |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
276 Py_IgnoreEnvironmentFlag++; |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
277 break; |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
278 case 'R': |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
279 Py_HashRandomizationFlag++; |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
280 break; |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
281 } |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
282 } |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
283 /* The variable is only tested for existence here; _PyRandom_Init will |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
284 check its value further. */ |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
285 if (!Py_HashRandomizationFlag && |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
286 (p = Py_GETENV("PYTHONHASHSEED")) && *p != '\0') |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
287 Py_HashRandomizationFlag = 1; |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
288 |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
289 _PyRandom_Init(); |
|
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
290 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
291 PySys_ResetWarnOptions(); |
|
75148
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
292 _PyOS_ResetGetOpt(); |
| 15593 | 293 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
294 while ((c = _PyOS_GetOpt(argc, argv, PROGRAM_OPTS)) != EOF) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
295 if (c == 'c') { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
296 /* -c is the last option; following arguments |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
297 that look like options are left for the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
298 command to interpret. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
299 command = (char *)malloc(strlen(_PyOS_optarg) + 2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
300 if (command == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
301 Py_FatalError( |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
302 "not enough memory to copy -c argument"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
303 strcpy(command, _PyOS_optarg); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
304 strcat(command, "\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
305 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
306 } |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
307 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
308 if (c == 'm') { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
309 /* -m is the last option; following arguments |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
310 that look like options are left for the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
311 module to interpret. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
312 module = (char *)malloc(strlen(_PyOS_optarg) + 2); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
313 if (module == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
314 Py_FatalError( |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
315 "not enough memory to copy -m argument"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
316 strcpy(module, _PyOS_optarg); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
317 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
318 } |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
319 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
320 switch (c) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
321 case 'b': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
322 Py_BytesWarningFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
323 break; |
| 2896 | 324 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
325 case 'd': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
326 Py_DebugFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
327 break; |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
328 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
329 case '3': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
330 Py_Py3kWarningFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
331 if (!Py_DivisionWarningFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
332 Py_DivisionWarningFlag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
333 break; |
| 12537 | 334 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
335 case 'Q': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
336 if (strcmp(_PyOS_optarg, "old") == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
337 Py_DivisionWarningFlag = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
338 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
339 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
340 if (strcmp(_PyOS_optarg, "warn") == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
341 Py_DivisionWarningFlag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
342 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
343 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
344 if (strcmp(_PyOS_optarg, "warnall") == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
345 Py_DivisionWarningFlag = 2; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
346 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
347 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
348 if (strcmp(_PyOS_optarg, "new") == 0) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
349 /* This only affects __main__ */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
350 cf.cf_flags |= CO_FUTURE_DIVISION; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
351 /* And this tells the eval loop to treat |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
352 BINARY_DIVIDE as BINARY_TRUE_DIVIDE */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
353 _Py_QnewFlag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
354 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
355 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
356 fprintf(stderr, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
357 "-Q option should be `-Qold', " |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
358 "`-Qwarn', `-Qwarnall', or `-Qnew' only\n"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
359 return usage(2, argv[0]); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
360 /* NOTREACHED */ |
| 15593 | 361 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
362 case 'i': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
363 Py_InspectFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
364 Py_InteractiveFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
365 break; |
| 2896 | 366 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
367 /* case 'J': reserved for Jython */ |
| 2896 | 368 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
369 case 'O': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
370 Py_OptimizeFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
371 break; |
|
5166
7151bb727776
Add -O option which sets Py_OptimizeFlag to avoid emitting SET_LINENO.
Guido van Rossum <guido@python.org>
parents:
5113
diff
changeset
|
372 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
373 case 'B': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
374 Py_DontWriteBytecodeFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
375 break; |
| 2896 | 376 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
377 case 's': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
378 Py_NoUserSiteDirectory++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
379 break; |
|
46698
1a2dbc84bdfc
Implemented PEP 370
Christian Heimes <christian@cheimes.de>
parents:
46435
diff
changeset
|
380 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
381 case 'S': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
382 Py_NoSiteFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
383 break; |
|
6203
f57ae68aa3ae
Added -X option to suppress default import of site.py. Also split the
Guido van Rossum <guido@python.org>
parents:
6199
diff
changeset
|
384 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
385 case 'E': |
|
75148
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
386 /* Already handled above */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
387 break; |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18692
diff
changeset
|
388 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
389 case 't': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
390 Py_TabcheckFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
391 break; |
| 2896 | 392 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
393 case 'u': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
394 unbuffered++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
395 saw_unbuffered_flag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
396 break; |
| 2896 | 397 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
398 case 'v': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
399 Py_VerboseFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
400 break; |
|
14603
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
401 |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
402 #ifdef RISCOS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
403 case 'w': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
404 Py_RISCOSWimpFlag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
405 break; |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
406 #endif |
|
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
407 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
408 case 'x': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
409 skipfirstline = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
410 break; |
|
6763
12824fe04a08
Two changes by Jeff Rush (slightly tweaked):
Guido van Rossum <guido@python.org>
parents:
6538
diff
changeset
|
411 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
412 /* case 'X': reserved for implementation-specific arguments */ |
|
14603
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
413 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
414 case 'U': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
415 Py_UnicodeFlag++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
416 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
417 case 'h': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
418 case '?': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
419 help++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
420 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
421 case 'V': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
422 version++; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
423 break; |
| 12537 | 424 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
425 case 'W': |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
426 PySys_AddWarnOption(_PyOS_optarg); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
427 break; |
| 15593 | 428 |
|
75100
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
429 case 'R': |
|
75148
76d72e92fdea
Fix crash at startup with -W options.
Antoine Pitrou <solipsis@pitrou.net>
parents:
75130
diff
changeset
|
430 /* Already handled above */ |
|
75100
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
431 break; |
|
6b7704fe1be1
- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
Barry Warsaw <barry@python.org>
parents:
68255
diff
changeset
|
432 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
433 /* This space reserved for other options */ |
| 2896 | 434 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
435 default: |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
436 return usage(2, argv[0]); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
437 /*NOTREACHED*/ |
| 2896 | 438 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
439 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
440 } |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18692
diff
changeset
|
441 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
442 if (help) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
443 return usage(0, argv[0]); |
|
14603
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
444 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
445 if (version) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
446 fprintf(stderr, "Python %s\n", PY_VERSION); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
447 return 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
448 } |
|
14603
80a782086a57
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
Barry Warsaw <barry@python.org>
parents:
14411
diff
changeset
|
449 |
|
61463
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
450 if (Py_Py3kWarningFlag && !Py_TabcheckFlag) |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
451 /* -3 implies -t (but not -tt) */ |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
452 Py_TabcheckFlag = 1; |
|
53083
ad3f3d304963
#5704: let python -3 imply -t as well.
Georg Brandl <georg@python.org>
parents:
51711
diff
changeset
|
453 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
454 if (!Py_InspectFlag && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
455 (p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
456 Py_InspectFlag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
457 if (!saw_unbuffered_flag && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
458 (p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
459 unbuffered = 1; |
|
18808
a8b1acc7a21f
Add -E command line switch (ignore environment variables like PYTHONHOME
Neil Schemenauer <nascheme@enme.ucalgary.ca>
parents:
18692
diff
changeset
|
460 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
461 if (!Py_NoUserSiteDirectory && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
462 (p = Py_GETENV("PYTHONNOUSERSITE")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
463 Py_NoUserSiteDirectory = 1; |
|
46698
1a2dbc84bdfc
Implemented PEP 370
Christian Heimes <christian@cheimes.de>
parents:
46435
diff
changeset
|
464 |
|
61463
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
465 if ((p = Py_GETENV("PYTHONWARNINGS")) && *p != '\0') { |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
466 char *buf, *warning; |
|
60484
f34cb501f8f7
fix PYTHONWARNINGS handling to not modify the original env value and improve
Philip Jenvey <pjenvey@underboss.org>
parents:
60433
diff
changeset
|
467 |
|
61463
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
468 buf = (char *)malloc(strlen(p) + 1); |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
469 if (buf == NULL) |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
470 Py_FatalError( |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
471 "not enough memory to copy PYTHONWARNINGS"); |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
472 strcpy(buf, p); |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
473 for (warning = strtok(buf, ","); |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
474 warning != NULL; |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
475 warning = strtok(NULL, ",")) |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
476 PySys_AddWarnOption(warning); |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
477 free(buf); |
|
fd25030223b0
Untabify C files. Will watch buildbots.
Antoine Pitrou <solipsis@pitrou.net>
parents:
61053
diff
changeset
|
478 } |
|
60433
c0957dada5c2
#7301: add the environment variable $PYTHONWARNINGS to supplement the -W
Philip Jenvey <pjenvey@underboss.org>
parents:
59499
diff
changeset
|
479 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
480 if (command == NULL && module == NULL && _PyOS_optind < argc && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
481 strcmp(argv[_PyOS_optind], "-") != 0) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
482 { |
|
28169
bc2d07230934
Patch #696645: Remove VMS code with uncertain authorship.
Martin v. Löwis <martin@v.loewis.de>
parents:
26764
diff
changeset
|
483 #ifdef __VMS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
484 filename = decc$translate_vms(argv[_PyOS_optind]); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
485 if (filename == (char *)0 || filename == (char *)-1) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
486 filename = argv[_PyOS_optind]; |
|
28169
bc2d07230934
Patch #696645: Remove VMS code with uncertain authorship.
Martin v. Löwis <martin@v.loewis.de>
parents:
26764
diff
changeset
|
487 |
|
bc2d07230934
Patch #696645: Remove VMS code with uncertain authorship.
Martin v. Löwis <martin@v.loewis.de>
parents:
26764
diff
changeset
|
488 #else |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
489 filename = argv[_PyOS_optind]; |
|
33188
0feccf19b16d
Patch #1011822: Display errno/strerror for inaccessible files.
Martin v. Löwis <martin@v.loewis.de>
parents:
31606
diff
changeset
|
490 #endif |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
491 } |
|
5109
0bbf97861cd9
My version of Lee Busby's patches to make '-i' pretend stdin is a tty
Guido van Rossum <guido@python.org>
parents:
5000
diff
changeset
|
492 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
493 stdin_is_interactive = Py_FdIsInteractive(stdin, (char *)0); |
|
5109
0bbf97861cd9
My version of Lee Busby's patches to make '-i' pretend stdin is a tty
Guido van Rossum <guido@python.org>
parents:
5000
diff
changeset
|
494 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
495 if (unbuffered) { |
|
24695
a989a2eaa2ac
On Cygwin, put stdin, stderr, and stdout in binary mode when the -u
Sjoerd Mullender <sjoerd@acm.org>
parents:
24480
diff
changeset
|
496 #if defined(MS_WINDOWS) || defined(__CYGWIN__) |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
497 _setmode(fileno(stdin), O_BINARY); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
498 _setmode(fileno(stdout), O_BINARY); |
|
4934
6b61912d5f35
On Windows, -u implies binary mode for stdin/stdout
Guido van Rossum <guido@python.org>
parents:
4620
diff
changeset
|
499 #endif |
|
7571
968aaba281c5
Don't use setvbuf unless HAVE_SETVBUF is defined.
Guido van Rossum <guido@python.org>
parents:
6763
diff
changeset
|
500 #ifdef HAVE_SETVBUF |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
501 setvbuf(stdin, (char *)NULL, _IONBF, BUFSIZ); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
502 setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
503 setvbuf(stderr, (char *)NULL, _IONBF, BUFSIZ); |
|
7571
968aaba281c5
Don't use setvbuf unless HAVE_SETVBUF is defined.
Guido van Rossum <guido@python.org>
parents:
6763
diff
changeset
|
504 #else /* !HAVE_SETVBUF */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
505 setbuf(stdin, (char *)NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
506 setbuf(stdout, (char *)NULL); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
507 setbuf(stderr, (char *)NULL); |
|
7571
968aaba281c5
Don't use setvbuf unless HAVE_SETVBUF is defined.
Guido van Rossum <guido@python.org>
parents:
6763
diff
changeset
|
508 #endif /* !HAVE_SETVBUF */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
509 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
510 else if (Py_InteractiveFlag) { |
|
5320
c3ddb84a7761
OK, I lied. On Windows, _IOLBF seems to be the same as full
Guido van Rossum <guido@python.org>
parents:
5319
diff
changeset
|
511 #ifdef MS_WINDOWS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
512 /* Doesn't have to have line-buffered -- use unbuffered */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
513 /* Any set[v]buf(stdin, ...) screws up Tkinter :-( */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
514 setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ); |
|
7571
968aaba281c5
Don't use setvbuf unless HAVE_SETVBUF is defined.
Guido van Rossum <guido@python.org>
parents:
6763
diff
changeset
|
515 #else /* !MS_WINDOWS */ |
|
968aaba281c5
Don't use setvbuf unless HAVE_SETVBUF is defined.
Guido van Rossum <guido@python.org>
parents:
6763
diff
changeset
|
516 #ifdef HAVE_SETVBUF |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
517 setvbuf(stdin, (char *)NULL, _IOLBF, BUFSIZ); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
518 setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ); |
|
7571
968aaba281c5
Don't use setvbuf unless HAVE_SETVBUF is defined.
Guido van Rossum <guido@python.org>
parents:
6763
diff
changeset
|
519 #endif /* HAVE_SETVBUF */ |
|
968aaba281c5
Don't use setvbuf unless HAVE_SETVBUF is defined.
Guido van Rossum <guido@python.org>
parents:
6763
diff
changeset
|
520 #endif /* !MS_WINDOWS */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
521 /* Leave stderr alone - it should be unbuffered anyway. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
522 } |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
523 #ifdef __VMS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
524 else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
525 setvbuf (stdout, (char *)NULL, _IOLBF, BUFSIZ); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
526 } |
|
26550
b9c912e2c3c0
Patch #614055: Support OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents:
25826
diff
changeset
|
527 #endif /* __VMS */ |
| 2896 | 528 |
|
28175
395eb561ece1
removing one Mac hack and add another:
Just van Rossum <just@letterror.com>
parents:
28169
diff
changeset
|
529 #ifdef __APPLE__ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
530 /* On MacOS X, when the Python interpreter is embedded in an |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
531 application bundle, it gets executed by a bootstrapping script |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
532 that does os.execve() with an argv[0] that's different from the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
533 actual Python executable. This is needed to keep the Finder happy, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
534 or rather, to work around Apple's overly strict requirements of |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
535 the process name. However, we still need a usable sys.executable, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
536 so the actual executable path is passed in an environment variable. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
537 See Lib/plat-mac/bundlebuiler.py for details about the bootstrap |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
538 script. */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
539 if ((p = Py_GETENV("PYTHONEXECUTABLE")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
540 Py_SetProgramName(p); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
541 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
542 Py_SetProgramName(argv[0]); |
|
28175
395eb561ece1
removing one Mac hack and add another:
Just van Rossum <just@letterror.com>
parents:
28169
diff
changeset
|
543 #else |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
544 Py_SetProgramName(argv[0]); |
|
28176
48a5113dfef9
An #endif was missing in Just's patch. Added.
Jack Jansen <jack.jansen@cwi.nl>
parents:
28175
diff
changeset
|
545 #endif |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
546 Py_Initialize(); |
|
5851
edaf1cb63dc0
This is no longer the real main program; it now defines Py_Main(), so
Guido van Rossum <guido@python.org>
parents:
5547
diff
changeset
|
547 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
548 if (Py_VerboseFlag || |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
549 (command == NULL && filename == NULL && module == NULL && stdin_is_interactive)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
550 fprintf(stderr, "Python %s on %s\n", |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
551 Py_GetVersion(), Py_GetPlatform()); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
552 if (!Py_NoSiteFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
553 fprintf(stderr, "%s\n", COPYRIGHT); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
554 } |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
555 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
556 if (command != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
557 /* Backup _PyOS_optind and force sys.argv[0] = '-c' */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
558 _PyOS_optind--; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
559 argv[_PyOS_optind] = "-c"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
560 } |
|
5851
edaf1cb63dc0
This is no longer the real main program; it now defines Py_Main(), so
Guido van Rossum <guido@python.org>
parents:
5547
diff
changeset
|
561 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
562 if (module != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
563 /* Backup _PyOS_optind and force sys.argv[0] = '-c' |
|
62313
8f137a5c413c
Revert r80580 due to some unintended side effects. See issue #8202 for details.
Nick Coghlan <ncoghlan@gmail.com>
parents:
61463
diff
changeset
|
564 so that PySys_SetArgv correctly sets sys.path[0] to '' |
|
8f137a5c413c
Revert r80580 due to some unintended side effects. See issue #8202 for details.
Nick Coghlan <ncoghlan@gmail.com>
parents:
61463
diff
changeset
|
565 rather than looking for a file called "-m". See |
|
8f137a5c413c
Revert r80580 due to some unintended side effects. See issue #8202 for details.
Nick Coghlan <ncoghlan@gmail.com>
parents:
61463
diff
changeset
|
566 tracker issue #8202 for details. */ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
567 _PyOS_optind--; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
568 argv[_PyOS_optind] = "-c"; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
569 } |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
570 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
571 PySys_SetArgv(argc-_PyOS_optind, argv+_PyOS_optind); |
|
19633
c0a44829bcd5
Add warning mode for classic division, almost exactly as specified in
Guido van Rossum <guido@python.org>
parents:
18808
diff
changeset
|
572 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
573 if ((Py_InspectFlag || (command == NULL && filename == NULL && module == NULL)) && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
574 isatty(fileno(stdin))) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
575 PyObject *v; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
576 v = PyImport_ImportModule("readline"); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
577 if (v == NULL) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
578 PyErr_Clear(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
579 else |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
580 Py_DECREF(v); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
581 } |
| 2896 | 582 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
583 if (command) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
584 sts = PyRun_SimpleStringFlags(command, &cf) != 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
585 free(command); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
586 } else if (module) { |
|
77948
55b3de6d701e
Fix closes issue # 15033 - Return the proper exitcode for failure when modules are invoked using -m switch. Patch contributed by Jeff Knupp
Senthil Kumaran <senthil@uthcode.com>
parents:
75159
diff
changeset
|
587 sts = (RunModule(module, 1) != 0); |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
588 free(module); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
589 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
590 else { |
|
33680
bcafb68ad985
SF patch #1035498: -m option to run a module as a script
Raymond Hettinger <python@rcn.com>
parents:
33188
diff
changeset
|
591 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
592 if (filename == NULL && stdin_is_interactive) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
593 Py_InspectFlag = 0; /* do exit on SystemExit */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
594 RunStartupFile(&cf); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
595 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
596 /* XXX */ |
|
43895
4cec0c6392c1
Patch #1739468: Directories and zipfiles containing __main__.py are now executable
Nick Coghlan <ncoghlan@gmail.com>
parents:
43534
diff
changeset
|
597 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
598 sts = -1; /* keep track of whether we've already run __main__ */ |
| 2896 | 599 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
600 if (filename != NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
601 sts = RunMainFromImporter(filename); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
602 } |
|
43895
4cec0c6392c1
Patch #1739468: Directories and zipfiles containing __main__.py are now executable
Nick Coghlan <ncoghlan@gmail.com>
parents:
43534
diff
changeset
|
603 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
604 if (sts==-1 && filename!=NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
605 if ((fp = fopen(filename, "r")) == NULL) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
606 fprintf(stderr, "%s: can't open file '%s': [Errno %d] %s\n", |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
607 argv[0], filename, errno, strerror(errno)); |
|
45854
21139ea59b6b
Remove all traces of HAVE_STRERROR.
Brett Cannon <bcannon@gmail.com>
parents:
44740
diff
changeset
|
608 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
609 return 2; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
610 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
611 else if (skipfirstline) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
612 int ch; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
613 /* Push back first newline so line numbers |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
614 remain the same */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
615 while ((ch = getc(fp)) != EOF) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
616 if (ch == '\n') { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
617 (void)ungetc(ch, fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
618 break; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
619 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
620 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
621 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
622 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
623 /* XXX: does this work on Win/Win64? (see posix_fstat) */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
624 struct stat sb; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
625 if (fstat(fileno(fp), &sb) == 0 && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
626 S_ISDIR(sb.st_mode)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
627 fprintf(stderr, "%s: '%s' is a directory, cannot continue\n", argv[0], filename); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
628 fclose(fp); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
629 return 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
630 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
631 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
632 } |
|
6316
c2359665be80
Move the "import readline" to an earlier place so it is also done when
Guido van Rossum <guido@python.org>
parents:
6203
diff
changeset
|
633 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
634 if (sts==-1) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
635 /* call pending calls like signal handlers (SIGINT) */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
636 if (Py_MakePendingCalls() == -1) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
637 PyErr_Print(); |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
638 sts = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
639 } else { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
640 sts = PyRun_AnyFileExFlags( |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
641 fp, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
642 filename == NULL ? "<stdin>" : filename, |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
643 filename != NULL, &cf) != 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
644 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
645 } |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
646 |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
647 } |
| 2896 | 648 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
649 /* Check this environment variable at the end, to give programs the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
650 * opportunity to set it from Python. |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
651 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
652 if (!Py_InspectFlag && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
653 (p = Py_GETENV("PYTHONINSPECT")) && *p != '\0') |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
654 { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
655 Py_InspectFlag = 1; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
656 } |
|
29682
920777640d28
Py_Main(): Add a check for the PYTHONINSPECT environment variable
Barry Warsaw <barry@python.org>
parents:
28453
diff
changeset
|
657 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
658 if (Py_InspectFlag && stdin_is_interactive && |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
659 (filename != NULL || command != NULL || module != NULL)) { |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
660 Py_InspectFlag = 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
661 /* XXX */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
662 sts = PyRun_AnyFileFlags(stdin, "<stdin>", &cf) != 0; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
663 } |
| 2896 | 664 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
665 Py_Finalize(); |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
666 #ifdef RISCOS |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
667 if (Py_RISCOSWimpFlag) |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
668 fprintf(stderr, "\x0cq\x0c"); /* make frontend quit */ |
|
16944
4baa5a955532
RISCOS changes by dschwertberger.
Guido van Rossum <guido@python.org>
parents:
16752
diff
changeset
|
669 #endif |
|
16752
5c3aedc969da
Py_Main(): When compiled by Insure (i.e. __INSURE__ is defined), call
Barry Warsaw <barry@python.org>
parents:
16731
diff
changeset
|
670 |
|
5c3aedc969da
Py_Main(): When compiled by Insure (i.e. __INSURE__ is defined), call
Barry Warsaw <barry@python.org>
parents:
16731
diff
changeset
|
671 #ifdef __INSURE__ |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
672 /* Insure++ is a memory analysis tool that aids in discovering |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
673 * memory leaks and other memory problems. On Python exit, the |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
674 * interned string dictionary is flagged as being in use at exit |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
675 * (which it is). Under normal circumstances, this is fine because |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
676 * the memory will be automatically reclaimed by the system. Under |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
677 * memory debugging, it's a huge source of useless noise, so we |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
678 * trade off slower shutdown for less distraction in the memory |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
679 * reports. -baw |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
680 */ |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
681 _Py_ReleaseInternedStrings(); |
|
16752
5c3aedc969da
Py_Main(): When compiled by Insure (i.e. __INSURE__ is defined), call
Barry Warsaw <barry@python.org>
parents:
16731
diff
changeset
|
682 #endif /* __INSURE__ */ |
|
5c3aedc969da
Py_Main(): When compiled by Insure (i.e. __INSURE__ is defined), call
Barry Warsaw <barry@python.org>
parents:
16731
diff
changeset
|
683 |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
684 return sts; |
| 2896 | 685 } |
| 686 | |
|
31606
fd2103ae6f29
Add pystack definition to Misc/gdbinit with some explanation of its behavior
Skip Montanaro <skip@pobox.com>
parents:
30968
diff
changeset
|
687 /* this is gonna seem *real weird*, but if you put some other code between |
|
fd2103ae6f29
Add pystack definition to Misc/gdbinit with some explanation of its behavior
Skip Montanaro <skip@pobox.com>
parents:
30968
diff
changeset
|
688 Py_Main() and Py_GetArgcArgv() you will need to adjust the test in the |
|
fd2103ae6f29
Add pystack definition to Misc/gdbinit with some explanation of its behavior
Skip Montanaro <skip@pobox.com>
parents:
30968
diff
changeset
|
689 while statement in Misc/gdbinit:ppystack */ |
| 2896 | 690 |
| 691 /* Make the *original* argc/argv available to other modules. | |
| 692 This is rare, but it is needed by the secureware extension. */ | |
| 693 | |
| 694 void | |
|
13482
000a1c7eb09f
- changed 1.5 to 2.0 in the help text
Fredrik Lundh <fredrik@pythonware.com>
parents:
13256
diff
changeset
|
695 Py_GetArgcArgv(int *argc, char ***argv) |
| 2896 | 696 { |
|
61465
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
697 *argc = orig_argc; |
|
e38335d4df91
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
59824
diff
changeset
|
698 *argv = orig_argv; |
| 2896 | 699 } |
|
37655
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
700 |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
701 #ifdef __cplusplus |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
702 } |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
703 #endif |
|
2f3f2e32dfd9
spread the extern "C" { } magic pixie dust around. Python itself builds now
Anthony Baxter <anthonybaxter@gmail.com>
parents:
37607
diff
changeset
|
704 |
