Accept long options "--help" and "--version".

This commit is contained in:
Georg Brandl 2006-07-12 15:31:17 +00:00
parent 76c5af6216
commit 9dceedbb97
3 changed files with 34 additions and 7 deletions

View File

@ -12,6 +12,9 @@ What's New in Python 2.5 release candidate 1?
Core and builtins Core and builtins
----------------- -----------------
- Patch #1521179: Python now accepts the standard options ``--help`` and
``--version`` as well as ``/?`` on Windows.
- Bug #1520864: unpacking singleton tuples in for loop (for x, in) work - Bug #1520864: unpacking singleton tuples in for loop (for x, in) work
again. Fixing this problem required changing the .pyc magic number. again. Fixing this problem required changing the .pyc magic number.
This means that .pyc files generated before 2.5c1 will be regenerated. This means that .pyc files generated before 2.5c1 will be regenerated.

View File

@ -40,7 +40,7 @@ static char **orig_argv;
static int orig_argc; static int orig_argc;
/* command line options */ /* command line options */
#define BASE_OPTS "c:dEhim:OQ:StuUvVW:xX" #define BASE_OPTS "c:dEhim:OQ:StuUvVW:xX?"
#ifndef RISCOS #ifndef RISCOS
#define PROGRAM_OPTS BASE_OPTS #define PROGRAM_OPTS BASE_OPTS
@ -62,7 +62,7 @@ Options and arguments (and corresponding environment variables):\n\
-c cmd : program passed in as string (terminates option list)\n\ -c cmd : program passed in as string (terminates option list)\n\
-d : debug output from parser (also PYTHONDEBUG=x)\n\ -d : debug output from parser (also PYTHONDEBUG=x)\n\
-E : ignore environment variables (such as PYTHONPATH)\n\ -E : ignore environment variables (such as PYTHONPATH)\n\
-h : print this help message and exit\n\ -h : print this help message and exit (also --help)\n\
-i : inspect interactively after running script, (also PYTHONINSPECT=x)\n\ -i : inspect interactively after running script, (also PYTHONINSPECT=x)\n\
and force prompts, even if stdin does not appear to be a terminal\n\ and force prompts, even if stdin does not appear to be a terminal\n\
"; ";
@ -78,7 +78,7 @@ static char *usage_2 = "\
static char *usage_3 = "\ static char *usage_3 = "\
see man page for details on internal buffering relating to '-u'\n\ see man page for details on internal buffering relating to '-u'\n\
-v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\ -v : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
-V : print the Python version number and exit\n\ -V : print the Python version number and exit (also --version)\n\
-W arg : warning control (arg is action:message:category:module:lineno)\n\ -W arg : warning control (arg is action:message:category:module:lineno)\n\
-x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\ -x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
file : program read from script file\n\ file : program read from script file\n\
@ -313,6 +313,7 @@ Py_Main(int argc, char **argv)
Py_UnicodeFlag++; Py_UnicodeFlag++;
break; break;
case 'h': case 'h':
case '?':
help++; help++;
break; break;
case 'V': case 'V':

View File

@ -24,6 +24,9 @@
* davegottner@delphi.com. * davegottner@delphi.com.
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
/* Modified to support --help and --version, as well as /? on Windows
* by Georg Brandl. */
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -43,8 +46,17 @@ int _PyOS_GetOpt(int argc, char **argv, char *optstring)
if (*opt_ptr == '\0') { if (*opt_ptr == '\0') {
if (_PyOS_optind >= argc || argv[_PyOS_optind][0] != '-' || if (_PyOS_optind >= argc)
argv[_PyOS_optind][1] == '\0' /* lone dash */ ) return -1;
#ifdef MS_WINDOWS
else if (strcmp(argv[_PyOS_optind], "/?") == 0) {
++_PyOS_optind;
return 'h';
}
#endif
else if (argv[_PyOS_optind][0] != '-' ||
argv[_PyOS_optind][1] == '\0' /* lone dash */ )
return -1; return -1;
else if (strcmp(argv[_PyOS_optind], "--") == 0) { else if (strcmp(argv[_PyOS_optind], "--") == 0) {
@ -52,6 +64,17 @@ int _PyOS_GetOpt(int argc, char **argv, char *optstring)
return -1; return -1;
} }
else if (strcmp(argv[_PyOS_optind], "--help") == 0) {
++_PyOS_optind;
return 'h';
}
else if (strcmp(argv[_PyOS_optind], "--version") == 0) {
++_PyOS_optind;
return 'V';
}
opt_ptr = &argv[_PyOS_optind++][1]; opt_ptr = &argv[_PyOS_optind++][1];
} }
@ -62,7 +85,7 @@ int _PyOS_GetOpt(int argc, char **argv, char *optstring)
if (_PyOS_opterr) if (_PyOS_opterr)
fprintf(stderr, "Unknown option: -%c\n", option); fprintf(stderr, "Unknown option: -%c\n", option);
return '?'; return '_';
} }
if (*(ptr + 1) == ':') { if (*(ptr + 1) == ':') {
@ -76,7 +99,7 @@ int _PyOS_GetOpt(int argc, char **argv, char *optstring)
if (_PyOS_opterr) if (_PyOS_opterr)
fprintf(stderr, fprintf(stderr,
"Argument expected for the -%c option\n", option); "Argument expected for the -%c option\n", option);
return '?'; return '_';
} }
_PyOS_optarg = argv[_PyOS_optind++]; _PyOS_optarg = argv[_PyOS_optind++];