summaryrefslogtreecommitdiffstats
path: root/Modules/main.c
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2000-09-15 18:40:42 (GMT)
committerBarry Warsaw <barry@python.org>2000-09-15 18:40:42 (GMT)
commit3b2aedbdc58c3466469abf4f3fbfc123195ff1f9 (patch)
tree31d0b404e1b052faf4dc8e64d99693074b39582e /Modules/main.c
parent645693783c47f143cab160105b6bd01935a55e8b (diff)
downloadcpython-3b2aedbdc58c3466469abf4f3fbfc123195ff1f9.zip
cpython-3b2aedbdc58c3466469abf4f3fbfc123195ff1f9.tar.gz
cpython-3b2aedbdc58c3466469abf4f3fbfc123195ff1f9.tar.bz2
Py_Main(), usage(), usage_mid: Add -h and -V flags to print the usage
message and Python version number and exit immediately. Closes patch #101496.
Diffstat (limited to 'Modules/main.c')
-rw-r--r--Modules/main.c40
1 files changed, 32 insertions, 8 deletions
diff --git a/Modules/main.c b/Modules/main.c
index fa316cf..b4d7cdf 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -1,4 +1,3 @@
-
/* Python interpreter main program */
#include "Python.h"
@@ -51,6 +50,8 @@ static char *usage_mid = "\
-U : Unicode literals: treats '...' literals like u'...'\n\
-v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
-x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
+-h : print this help message and exit\n\
+-V : print the Python version number and exit\n\
-c cmd : program passed in as string (terminates option list)\n\
file : program read from script file\n\
- : program read from stdin (default; interactive mode if a tty)\n\
@@ -66,6 +67,18 @@ PYTHONHOME : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\
";
+static void
+usage(int exitcode, char* program)
+{
+ fprintf(stderr, usage_line, program);
+ fprintf(stderr, usage_top);
+ fprintf(stderr, usage_mid);
+ fprintf(stderr, usage_bot, DELIM, DELIM, PYTHONHOMEHELP);
+ exit(exitcode);
+ /*NOTREACHED*/
+}
+
+
/* Main program */
DL_EXPORT(int)
@@ -81,6 +94,8 @@ Py_Main(int argc, char **argv)
int unbuffered = 0;
int skipfirstline = 0;
int stdin_is_interactive = 0;
+ int help = 0;
+ int version = 0;
orig_argc = argc; /* For Py_GetArgcArgv() */
orig_argv = argv;
@@ -90,7 +105,7 @@ Py_Main(int argc, char **argv)
if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
unbuffered = 1;
- while ((c = getopt(argc, argv, "c:diOStuUvxX")) != EOF) {
+ while ((c = getopt(argc, argv, "c:diOStuUvxXhV")) != EOF) {
if (c == 'c') {
/* -c is the last option; following arguments
that look like options are left for the
@@ -142,21 +157,30 @@ Py_Main(int argc, char **argv)
case 'U':
Py_UnicodeFlag++;
break;
+ case 'h':
+ help++;
+ break;
+ case 'V':
+ version++;
+ break;
/* This space reserved for other options */
default:
- fprintf(stderr, usage_line, argv[0]);
- fprintf(stderr, usage_top);
- fprintf(stderr, usage_mid);
- fprintf(stderr, usage_bot,
- DELIM, DELIM, PYTHONHOMEHELP);
- exit(2);
+ usage(2, argv[0]);
/*NOTREACHED*/
}
}
+ if (help)
+ usage(0, argv[0]);
+
+ if (version) {
+ fprintf(stderr, "Python %s\n", PY_VERSION);
+ exit(0);
+ }
+
if (command == NULL && optind < argc &&
strcmp(argv[optind], "-") != 0)
{