Fix 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:28:16 -07:00
parent 035997f1a3
commit f01a337950
3 changed files with 19 additions and 1 deletions

View file

@ -279,6 +279,21 @@ class CmdLineTest(unittest.TestCase):
self._check_output(script_name, rc, out, self._check_output(script_name, rc, out,
script_name, script_name, '', '') script_name, script_name, '', '')
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:
with support.temp_cwd(path=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():
support.run_unittest(CmdLineTest) support.run_unittest(CmdLineTest)
support.reap_children() support.reap_children()

View file

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

View file

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