mirror of
https://github.com/python/cpython.git
synced 2024-11-28 12:31:14 +08:00
Two changes by Jeff Rush (slightly tweaked):
- New option -x, to skip first line of script - Use the correct platform-specific delimiter and library location in the usage message (Also removed two blank lines and moved one line around so that each part of the usage message is again under 512 bytes and the whole usage message still fits in 23 lines.)
This commit is contained in:
parent
595d7ba069
commit
a075ce1618
@ -32,6 +32,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||
/* Python interpreter main program */
|
||||
|
||||
#include "Python.h"
|
||||
#include "osdefs.h"
|
||||
|
||||
#ifdef HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
@ -41,6 +42,12 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#if defined(PYOS_OS2) || defined(MS_WINDOWS)
|
||||
#define PYTHONHOMEHELP "<prefix>\\lib"
|
||||
#else
|
||||
#define PYTHONHOMEHELP "<prefix>/python1.5"
|
||||
#endif
|
||||
|
||||
/* Interface to getopt(): */
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
@ -53,20 +60,21 @@ static int orig_argc;
|
||||
|
||||
/* Short usage message (with %s for argv0) */
|
||||
static char *usage_line =
|
||||
"usage: %s [-d] [-i] [-O] [-S] [-u] [-v] [-X] [-c cmd | file | -] [arg] ...\n";
|
||||
"usage: %s [-d] [-i] [-O] [-S] [-u] [-v] [-x] [-X] [-c cmd | file | -] [arg] ...\n";
|
||||
|
||||
/* Long usage message, split into parts < 512 bytes */
|
||||
static char *usage_top = "\n\
|
||||
static char *usage_top = "\
|
||||
Options and arguments (and corresponding environment variables):\n\
|
||||
-d : debug output from parser (also PYTHONDEBUG=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\
|
||||
-O : optimize generated bytecode (a tad).\n\
|
||||
-S : don't imply 'import site' on initialization\n\
|
||||
-u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\n\
|
||||
";
|
||||
static char *usage_mid = "\
|
||||
-u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x)\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\
|
||||
-X : disable class based built-in exceptions\n\
|
||||
-c cmd : program passed in as string (terminates option list)\n\
|
||||
file : program read from script file\n\
|
||||
@ -74,13 +82,12 @@ file : program read from script file\n\
|
||||
arg ...: arguments passed to program in sys.argv[1:]\n\
|
||||
";
|
||||
static char *usage_bot = "\
|
||||
\n\
|
||||
Other environment variables:\n\
|
||||
PYTHONSTARTUP: file executed on interactive startup (no default)\n\
|
||||
PYTHONPATH : colon-separated list of directories prefixed to the\n\
|
||||
PYTHONPATH : '%c'-separated list of directories prefixed to the\n\
|
||||
default module search path. The result is sys.path.\n\
|
||||
PYTHONHOME : alternate <prefix> directory (or <prefix>:<exec_prefix>).\n\
|
||||
The default module search path uses <prefix>/lib/python1.5.\n\
|
||||
PYTHONHOME : alternate <prefix> directory (or <prefix>%c<exec_prefix>).\n\
|
||||
The default module search path uses %s.\n\
|
||||
";
|
||||
|
||||
|
||||
@ -99,6 +106,7 @@ Py_Main(argc, argv)
|
||||
char *p;
|
||||
int inspect = 0;
|
||||
int unbuffered = 0;
|
||||
int skipfirstline = 0;
|
||||
int stdin_is_interactive = 0;
|
||||
|
||||
orig_argc = argc; /* For Py_GetArgcArgv() */
|
||||
@ -109,7 +117,7 @@ Py_Main(argc, argv)
|
||||
if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
|
||||
unbuffered = 1;
|
||||
|
||||
while ((c = getopt(argc, argv, "c:diOSuvX")) != EOF) {
|
||||
while ((c = getopt(argc, argv, "c:diOSuvxX")) != EOF) {
|
||||
if (c == 'c') {
|
||||
/* -c is the last option; following arguments
|
||||
that look like options are left for the
|
||||
@ -150,6 +158,10 @@ Py_Main(argc, argv)
|
||||
Py_VerboseFlag++;
|
||||
break;
|
||||
|
||||
case 'x':
|
||||
skipfirstline = 1;
|
||||
break;
|
||||
|
||||
case 'X':
|
||||
Py_UseClassExceptionsFlag = 0;
|
||||
break;
|
||||
@ -160,7 +172,8 @@ Py_Main(argc, argv)
|
||||
fprintf(stderr, usage_line, argv[0]);
|
||||
fprintf(stderr, usage_top);
|
||||
fprintf(stderr, usage_mid);
|
||||
fprintf(stderr, usage_bot);
|
||||
fprintf(stderr, usage_bot,
|
||||
DELIM, DELIM, PYTHONHOMEHELP);
|
||||
exit(2);
|
||||
/*NOTREACHED*/
|
||||
|
||||
@ -177,6 +190,10 @@ Py_Main(argc, argv)
|
||||
argv[0], filename);
|
||||
exit(2);
|
||||
}
|
||||
else if (skipfirstline) {
|
||||
char line[256];
|
||||
fgets(line, sizeof line, fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user