Fix closes issue # 15033 - Return the proper exitcode for failure when modules are invoked using -m switch. Patch contributed by Jeff Knupp

This commit is contained in:
Senthil Kumaran 2012-07-04 19:50:29 -07:00
parent d0f5f4827d
commit 3b30b19e0a
3 changed files with 21 additions and 2 deletions

View File

@ -6,11 +6,14 @@
import test.test_support import test.test_support
from test.script_helper import (run_python, from test.script_helper import (run_python,
temp_dir, make_script, compile_script, 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 verbose = test.test_support.verbose
example_args = ['test1', 'test2', 'test3']
test_source = """\ test_source = """\
# Script may be run with optimisation enabled, so don't rely on assert # Script may be run with optimisation enabled, so don't rely on assert
# statements being executed # statements being executed
@ -204,6 +207,19 @@ def test_package_recursion(self):
launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg') launch_name = _make_launch_script(script_dir, 'launch', 'test_pkg')
self._check_import_error(launch_name, msg) 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(): def test_main():
test.test_support.run_unittest(CmdLineTest) test.test_support.run_unittest(CmdLineTest)

View File

@ -9,6 +9,9 @@ What's New in Python 2.7.4
Core and Builtins 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 - Issue #12268: File readline, readlines and read() methods no longer lose
data when an underlying read system call is interrupted. IOError is no 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 longer raised due to a read system call returning EINTR from within these

View File

@ -583,7 +583,7 @@ Py_Main(int argc, char **argv)
sts = PyRun_SimpleStringFlags(command, &cf) != 0; sts = PyRun_SimpleStringFlags(command, &cf) != 0;
free(command); free(command);
} else if (module) { } else if (module) {
sts = RunModule(module, 1); sts = (RunModule(module, 1) != 0);
free(module); free(module);
} }
else { else {