diff -ruN tcl.org/generic/tclIOCmd.c tcl/generic/tclIOCmd.c
--- tcl.org/generic/tclIOCmd.c	2006-04-24 17:00:19.000000000 -0600
+++ tcl/generic/tclIOCmd.c	2006-04-24 17:05:10.000000000 -0600
@@ -800,19 +800,19 @@
     char *string;
     Tcl_Channel chan;
     CONST char *argStorage[NUM_ARGS];
-    int argc, background, i, index, keepNewline, result, skip, length;
+    int argc, background, i, index, keepNewline, ignoreStderr, result, skip, length;
     static CONST char *options[] = {
-	"-keepnewline",	"--", NULL
+	"-keepnewline",	"-ignorestderr",	"--", NULL
     };
     enum options {
-	EXEC_KEEPNEWLINE, EXEC_LAST
+	EXEC_KEEPNEWLINE, EXEC_IGNORESTDERR, EXEC_LAST
     };
 
     /*
-     * Check for a leading "-keepnewline" argument.
+     * Check for a leading "-keepnewline" and "-ignorestderr"  arguments.
      */
 
-    keepNewline = 0;
+    keepNewline = 0; ignoreStderr = 0;
     for (skip = 1; skip < objc; skip++) {
 	string = Tcl_GetString(objv[skip]);
 	if (string[0] != '-') {
@@ -824,6 +824,8 @@
 	}
 	if (index == EXEC_KEEPNEWLINE) {
 	    keepNewline = 1;
+	} else if (index == EXEC_IGNORESTDERR) {
+	    ignoreStderr = 1;
 	} else {
 	    skip++;
 	    break;
@@ -866,7 +868,7 @@
     }
     argv[argc] = NULL;
     chan = Tcl_OpenCommandChannel(interp, argc, argv,
-	    (background ? 0 : TCL_STDOUT | TCL_STDERR));
+	    (background ? 0 : ignoreStderr ? TCL_STDOUT : TCL_STDOUT | TCL_STDERR));
 
     /*
      * Free the argv array if malloc'ed storage was used.
