Skip to content

Commit

Permalink
Merge pull request #13768 from osherdp/feature/raise-when-opening-sta…
Browse files Browse the repository at this point in the history
…ndard-streams

raise an error when user tries to open a standard stream
  • Loading branch information
Carreau committed Oct 29, 2022
2 parents 1b5674c + f44e270 commit 93992a7
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
11 changes: 11 additions & 0 deletions IPython/core/interactiveshell.py
Expand Up @@ -270,6 +270,16 @@ def __repr__(self):
return '<%s object at %x, execution_count=%s error_before_exec=%s error_in_exec=%s info=%s result=%s>' %\
(name, id(self), self.execution_count, self.error_before_exec, self.error_in_exec, repr(self.info), repr(self.result))

@functools.wraps(io_open)
def _modified_open(file, *args, **kwargs):
if file in {0, 1, 2}:
raise ValueError(
f"IPython won't let you open fd={file} by default "
"as it is likely to crash IPython. If you know what you are doing, "
"you can use builtins' open."
)

return io_open(file, *args, **kwargs)

class InteractiveShell(SingletonConfigurable):
"""An enhanced, interactive shell for Python."""
Expand Down Expand Up @@ -1323,6 +1333,7 @@ def init_user_ns(self):

ns['exit'] = self.exiter
ns['quit'] = self.exiter
ns["open"] = _modified_open

# Sync what we've added so far to user_ns_hidden so these aren't seen
# by %who
Expand Down
12 changes: 12 additions & 0 deletions IPython/core/tests/test_interactiveshell.py
Expand Up @@ -103,6 +103,18 @@ def test_syntax_error(self):
res = ip.run_cell("raise = 3")
self.assertIsInstance(res.error_before_exec, SyntaxError)

def test_open_standard_input_stream(self):
res = ip.run_cell("open(0)")
self.assertIsInstance(res.error_in_exec, ValueError)

def test_open_standard_output_stream(self):
res = ip.run_cell("open(1)")
self.assertIsInstance(res.error_in_exec, ValueError)

def test_open_standard_error_stream(self):
res = ip.run_cell("open(2)")
self.assertIsInstance(res.error_in_exec, ValueError)

def test_In_variable(self):
"Verify that In variable grows with user input (GH-284)"
oldlen = len(ip.user_ns['In'])
Expand Down

0 comments on commit 93992a7

Please sign in to comment.