diff --git a/Python/ceval.c b/Python/ceval.c
index 1c12d9c..8ed4663 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -49,6 +49,9 @@
 #define CHECKEXC 1	/* Double-check exception checking */
 #endif
 
+/* Global option, may be set by main() */
+int killprint;
+
 
 /* Forward declarations */
 
@@ -639,6 +642,11 @@
 				softspace(x, 1);
 				err = writeobject(v, x, 0);
 				flushline();
+				if (killprint) {
+					err_setstr(RuntimeError,
+					      "printing expression statement");
+					x = 0;
+				}
 			}
 			DECREF(v);
 			break;
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
index 90d1623..8bc136a 100644
--- a/Python/frozenmain.c
+++ b/Python/frozenmain.c
@@ -30,28 +30,43 @@
 
 extern int debugging;
 extern int verbose;
+extern int killprint;
 
 main(argc, argv)
 	int argc;
 	char **argv;
 {
 	char *p;
+	int n, inspect, sts;
 	int n;
+
 	if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
 		debugging = 1;
 	if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
 		verbose = 1;
-	initargs(&argc, &argv); /* Defined in config*.c */
+	if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
+		inspect = 1;
+	if ((p = getenv("PYTHONKILLPRINT")) && *p != '\0')
+		killprint = 1;
+
+	initargs(&argc, &argv);
 	initall();
 	setpythonargv(argc, argv);
+
 	n = init_frozen("__main__");
 	if (n == 0)
 		fatal("__main__ not frozen");
 	if (n < 0) {
 		print_error();
-		goaway(1);
+		sts = 1;
 	}
 	else
-		goaway(0);
+		sts = 0;
+
+	if (inspect && isatty((int)fileno(stdin)) &&
+	    (filename != NULL || command != NULL))
+		sts = run(stdin, "<stdin>") != 0;
+
+	goaway(sts);
 	/*NOTREACHED*/
 }
diff --git a/Python/pythonmain.c b/Python/pythonmain.c
index 760e5da..ac1d86a 100644
--- a/Python/pythonmain.c
+++ b/Python/pythonmain.c
@@ -26,8 +26,9 @@
 
 #include "allobjects.h"
 
-extern int debugging; /* Needed by parser.c */
-extern int verbose; /* Needed by import.c */
+extern int debugging; /* Defined in parser.c */
+extern int verbose; /* Defined in import.c */
+extern int killprint; /* Defined in ceval.c */
 
 /* Interface to getopt(): */
 extern int optind;
@@ -52,10 +53,14 @@
 		debugging = 1;
 	if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
 		verbose = 1;
+	if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
+		inspect = 1;
+	if ((p = getenv("PYTHONKILLPRINT")) && *p != '\0')
+		killprint = 1;
 	
-	initargs(&argc, &argv); /* Defined in config*.c */
+	initargs(&argc, &argv);
 
-	while ((c = getopt(argc, argv, "c:div")) != EOF) {
+	while ((c = getopt(argc, argv, "c:dikv")) != EOF) {
 		if (c == 'c') {
 			/* -c is the last option; following arguments
 			   that look like options are left for the
@@ -77,6 +82,10 @@
 			inspect++;
 			break;
 
+		case 'k':
+			killprint++;
+			break;
+
 		case 'v':
 			verbose++;
 			break;
@@ -85,8 +94,25 @@
 
 		default:
 			fprintf(stderr,
-				"usage: %s [-c cmd | file | -] [arg] ...\n",
+"usage: %s [-d] [-i] [-k] [-v] [-c cmd | file | -] [arg] ...\n",
 				argv[0]);
+			fprintf(stderr, "\
+\n\
+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\
+-k     : kill printing expression statement (also PYTHONKILLPRINT=x)\n\
+-v     : verbose (trace import statements) (also PYTHONVERBOSE=x)\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\
+arg ...: arguments passed to program in sys.argv[1:]\n\
+\n\
+Other environment variables:\n\
+PYTHONSTARTUP: file executed on interactive startup (no default)\n\
+PYTHONPATH   : colon-separated list of directories prefixed to the\n\
+               default module search path.  The result is sys.path.\n\
+");
 			exit(2);
 			/*NOTREACHED*/
 
