Mercurial > cpython-lru_cache-weakref
comparison Python/pythonmain.c @ 282:d5c9ae422b41 legacy-trunk
Add run_command() to implement "-c command".
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 07 Jun 1991 13:59:53 +0000 |
| parents | 6acd41a45d8d |
| children | 85bd7dac13f3 |
comparison
equal
deleted
inserted
replaced
| 281:6dfc92630123 | 282:d5c9ae422b41 |
|---|---|
| 45 | 45 |
| 46 #ifdef DEBUG | 46 #ifdef DEBUG |
| 47 int debugging; /* Needed by parser.c */ | 47 int debugging; /* Needed by parser.c */ |
| 48 #endif | 48 #endif |
| 49 | 49 |
| 50 /* Interface to getopt(): */ | |
| 51 extern int optind; | |
| 52 extern char *optarg; | |
| 53 extern int getopt PROTO((int, char **, char *)); | |
| 54 | |
| 50 main(argc, argv) | 55 main(argc, argv) |
| 51 int argc; | 56 int argc; |
| 52 char **argv; | 57 char **argv; |
| 53 { | 58 { |
| 59 int c; | |
| 60 int sts; | |
| 61 char *command = NULL; | |
| 54 char *filename = NULL; | 62 char *filename = NULL; |
| 55 FILE *fp = stdin; | 63 FILE *fp = stdin; |
| 56 | 64 |
| 57 initargs(&argc, &argv); | 65 initargs(&argc, &argv); /* Defined in config*.c */ |
| 58 | 66 |
| 59 if (argc > 1 && strcmp(argv[1], "-") != 0) | 67 while ((c = getopt(argc, argv, "c:")) != EOF) { |
| 60 filename = argv[1]; | 68 switch (c) { |
| 69 | |
| 70 default: | |
| 71 fprintf(stderr, | |
| 72 "usage: %s [-c cmd | file | -] [arg] ...\n", | |
| 73 argv[0]); | |
| 74 exit(2); | |
| 75 /*NOTREACHED*/ | |
| 76 | |
| 77 case 'c': | |
| 78 if (command != NULL) { | |
| 79 fprintf(stderr, "%s: duplicate -c option\n", | |
| 80 argv[0]); | |
| 81 exit(2); | |
| 82 } | |
| 83 command = malloc(strlen(optarg) + 2); | |
| 84 /* Ignore malloc errors this early... */ | |
| 85 strcpy(command, optarg); | |
| 86 strcat(command, "\n"); | |
| 87 break; | |
| 88 | |
| 89 } | |
| 90 } | |
| 91 | |
| 92 if (command == NULL && optind < argc && strcmp(argv[optind], "-") != 0) | |
| 93 filename = argv[optind]; | |
| 61 | 94 |
| 62 if (filename != NULL) { | 95 if (filename != NULL) { |
| 63 if ((fp = fopen(filename, "r")) == NULL) { | 96 if ((fp = fopen(filename, "r")) == NULL) { |
| 64 fprintf(stderr, "python: can't open file '%s'\n", | 97 fprintf(stderr, "%s: can't open file '%s'\n", |
| 65 filename); | 98 argv[0], filename); |
| 66 exit(2); | 99 exit(2); |
| 67 } | 100 } |
| 68 } | 101 } |
| 69 | 102 |
| 70 initall(); | 103 initall(); /* Defined in config*.c */ |
| 71 | 104 |
| 72 setpythonpath(getpythonpath()); | 105 setpythonpath(getpythonpath()); |
| 73 setpythonargv(argc-1, argv+1); | 106 if (command != NULL) { |
| 74 | 107 /* Backup optind and force sys.argv[0] = '-c' */ |
| 75 goaway(run(fp, filename == NULL ? "<stdin>" : filename)); | 108 optind--; |
| 109 argv[optind] = "-c"; | |
| 110 } | |
| 111 setpythonargv(argc-optind, argv+optind); | |
| 112 | |
| 113 if (command) { | |
| 114 sts = run_command(command) != 0; | |
| 115 } | |
| 116 else { | |
| 117 sts = run(fp, filename == NULL ? "<stdin>" : filename) != 0; | |
| 118 } | |
| 119 | |
| 120 goaway(sts); | |
| 76 /*NOTREACHED*/ | 121 /*NOTREACHED*/ |
| 77 } | 122 } |
| 78 | 123 |
| 79 /* Initialize all */ | 124 /* Initialize all */ |
| 80 | 125 |
| 217 } | 262 } |
| 218 DECREF(v); | 263 DECREF(v); |
| 219 return 0; | 264 return 0; |
| 220 } | 265 } |
| 221 | 266 |
| 267 int | |
| 268 run_command(command) | |
| 269 char *command; | |
| 270 { | |
| 271 object *m, *d, *v; | |
| 272 m = add_module("__main__"); | |
| 273 if (m == NULL) | |
| 274 return -1; | |
| 275 d = getmoduledict(m); | |
| 276 v = run_string(command, file_input, d, d); | |
| 277 flushline(); | |
| 278 if (v == NULL) { | |
| 279 print_error(); | |
| 280 return -1; | |
| 281 } | |
| 282 DECREF(v); | |
| 283 return 0; | |
| 284 } | |
| 285 | |
| 222 void | 286 void |
| 223 print_error() | 287 print_error() |
| 224 { | 288 { |
| 225 object *exception, *v; | 289 object *exception, *v; |
| 226 err_get(&exception, &v); | 290 err_get(&exception, &v); |
