be more suspicious of getlocals()
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 0be0373..21562ae 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -1105,7 +1105,8 @@
 	if (!newgetargs(args, "|O:[raw_]input", &v))
 		return NULL;
 	if (getfilefile(sysget("stdin")) == stdin &&
-	    getfilefile(sysget("stdout")) == stdout) {
+	    getfilefile(sysget("stdout")) == stdout &&
+	    isatty(fileno(stdin)) && isatty(fileno(stdout))) {
 		object *po;
 		char *prompt;
 		char *s;
@@ -1366,7 +1367,12 @@
 		return NULL;
 	if (v == NULL) {
 		d = getlocals();
-		INCREF(d);
+		if (d == NULL) {
+			if (!err_occurred())
+				err_setstr(SystemError, "no locals!?");
+		}
+		else
+			INCREF(d);
 	}
 	else {
 		d = getattr(v, "__dict__");