(original) (raw)

changeset: 77948:55b3de6d701e branch: 2.7 parent: 77932:2de5c9ced464 user: Senthil Kumaran senthil@uthcode.com date: Wed Jul 04 19:50:29 2012 -0700 files: Lib/test/test_cmd_line_script.py Misc/NEWS Modules/main.c description: Fix closes issue # 15033 - Return the proper exitcode for failure when modules are invoked using -m switch. Patch contributed by Jeff Knupp diff -r 2de5c9ced464 -r 55b3de6d701e Lib/test/test_cmd_line_script.py --- a/Lib/test/test_cmd_line_script.py Tue Jul 03 13:07:58 2012 +0200 +++ b/Lib/test/test_cmd_line_script.py Wed Jul 04 19:50:29 2012 -0700 @@ -6,11 +6,14 @@ import test.test_support from test.script_helper import (run_python, temp_dir, make_script, compile_script, - make_pkg, make_zip_script, make_zip_pkg) + assert_python_failure, make_pkg, + make_zip_script, make_zip_pkg) verbose = test.test_support.verbose +example_args = ['test1', 'test2', 'test3'] + test_source = """\ # Script may be run with optimisation enabled, so don't rely on assert # statements being executed @@ -204,6 +207,19 @@ launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg') self._check_import_error(launch_name, msg) + def test_dash_m_error_code_is_one(self): + # If a module is invoked with the -m command line flag + # and results in an error that the return code to the + # shell is '1' + with temp_dir() as script_dir: + pkg_dir = os.path.join(script_dir, 'test_pkg') + make_pkg(pkg_dir) + script_name = _make_test_script(pkg_dir, 'other', "if __name__ == '__main__': raise ValueError") + rc, out, err = assert_python_failure('-m', 'test_pkg.other', *example_args) + if verbose > 1: + print(out) + self.assertEqual(rc, 1) + def test_main(): test.test_support.run_unittest(CmdLineTest) diff -r 2de5c9ced464 -r 55b3de6d701e Misc/NEWS --- a/Misc/NEWS Tue Jul 03 13:07:58 2012 +0200 +++ b/Misc/NEWS Wed Jul 04 19:50:29 2012 -0700 @@ -9,6 +9,9 @@ Core and Builtins ----------------- +- Issue #15033: Fix the exit status bug when modules invoked using -m swith, + return the proper failure return value (1). Patch contributed by Jeff Knupp. + - Issue #12268: File readline, readlines and read() methods no longer lose data when an underlying read system call is interrupted. IOError is no longer raised due to a read system call returning EINTR from within these diff -r 2de5c9ced464 -r 55b3de6d701e Modules/main.c --- a/Modules/main.c Tue Jul 03 13:07:58 2012 +0200 +++ b/Modules/main.c Wed Jul 04 19:50:29 2012 -0700 @@ -583,7 +583,7 @@ sts = PyRun_SimpleStringFlags(command, &cf) != 0; free(command); } else if (module) { - sts = RunModule(module, 1); + sts = (RunModule(module, 1) != 0); free(module); } else { /senthil@uthcode.com