diff -r 0acc5626a578 Lib/test/test_cmd_line.py --- a/Lib/test/test_cmd_line.py Tue Oct 23 22:50:11 2012 +0100 +++ b/Lib/test/test_cmd_line.py Fri Oct 26 00:28:01 2012 +0300 @@ -7,7 +7,8 @@ import sys import subprocess import tempfile -from test.script_helper import spawn_python, kill_python, assert_python_ok, assert_python_failure +from test.script_helper import (spawn_python, kill_python, assert_python_ok, + assert_python_failure) # XXX (ncoghlan): Move to script_helper and make consistent with run_python @@ -358,6 +359,12 @@ self.assertEqual(rc, 0) self.assertIn(b'random is 1', out) + def test_unknown_options(self): + rc, out, err = assert_python_failure('-z', __cleanenv=True) + self.assertIn(b'Unknown option', err) + self.assertEqual(err.splitlines().count(b'Unknown option: -z'), 1) + self.assertEqual(b'', out) + def test_main(): test.support.run_unittest(CmdLineTest) test.support.reap_children() diff -r 0acc5626a578 Python/getopt.c --- a/Python/getopt.c Tue Oct 23 22:50:11 2012 +0100 +++ b/Python/getopt.c Fri Oct 26 00:28:01 2012 +0300 @@ -45,7 +45,7 @@ void _PyOS_ResetGetOpt(void) { - _PyOS_opterr = 1; + _PyOS_opterr = 0; /* prevent printing the error in 2nd loop in main.c */ _PyOS_optind = 1; _PyOS_optarg = NULL; opt_ptr = L""; @@ -90,18 +90,18 @@ opt_ptr = &argv[_PyOS_optind++][1]; } - if ( (option = *opt_ptr++) == L'\0') + if ((option = *opt_ptr++) == L'\0') return -1; if (option == 'J') { - fprintf(stderr, "-J is reserved for Jython\n"); + if (_PyOS_opterr) + fprintf(stderr, "-J is reserved for Jython\n"); return '_'; } if ((ptr = wcschr(optstring, option)) == NULL) { if (_PyOS_opterr) - fprintf(stderr, "Unknown option: -%c\n", (char)option); - + fprintf(stderr, "Unknown option: -%c\n", (char)option); return '_'; }