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);