From a46467ff198c42c8f34768c7be4b4562f6f44736 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 24 Sep 2018 08:06:29 -0700 Subject: [PATCH] bpo-34783: Add test_cmd_line_script.test_nonexisting_script() (GH-9535) Make sure that "./python script.py" does not crash if the script file doesn't exist. --- Lib/test/test_cmd_line_script.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index a9c1309ad6d..2595ca98c7a 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -630,6 +630,25 @@ class CmdLineTest(unittest.TestCase): traceback_lines = stderr.decode().splitlines() self.assertIn("No module named script_pkg", traceback_lines[-1]) + def test_nonexisting_script(self): + # bpo-34783: "./python script.py" must not crash + # if the script file doesn't exist. + script = 'nonexistingscript.py' + self.assertFalse(os.path.exists(script)) + # Only test the base name, since the error message can use + # a relative path, whereas sys.executable can be an asolution path. + program = os.path.basename(sys.executable) + + proc = spawn_python(script, text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + out, err = proc.communicate() + # "./python" must be in the error message: + # "./python: can't open file (...)" + self.assertIn(program, err) + self.assertNotEqual(proc.returncode, 0) + + def test_main(): support.run_unittest(CmdLineTest) support.reap_children()