mirror of
https://github.com/python/cpython
synced 2024-09-16 01:31:10 +00:00
Fixed restore_files(); added reset_files(); made these more flexible.
This commit is contained in:
parent
7d844a7c8a
commit
cd6aab91a5
41
Lib/rexec.py
41
Lib/rexec.py
|
@ -33,6 +33,8 @@ class FileBase:
|
|||
|
||||
class FileWrapper(FileBase):
|
||||
|
||||
# XXX This is just like a Bastion -- should use that!
|
||||
|
||||
def __init__(self, f):
|
||||
self.f = f
|
||||
for m in self.ok_file_methods:
|
||||
|
@ -278,22 +280,43 @@ def r_unload(self, m):
|
|||
|
||||
# The s_* methods are similar but also swap std{in,out,err}
|
||||
|
||||
def set_files(self):
|
||||
def make_delegate_files(self):
|
||||
s = self.modules['sys']
|
||||
s.stdin = FileWrapper(sys.stdin)
|
||||
s.stdout = FileWrapper(sys.stdout)
|
||||
s.stderr = FileWrapper(sys.stderr)
|
||||
sys.stdin = FileDelegate(s, 'stdin')
|
||||
sys.stdout = FileDelegate(s, 'stdout')
|
||||
sys.stderr = FileDelegate(s, 'stderr')
|
||||
self.delegate_stdin = FileDelegate(s, 'stdin')
|
||||
self.delegate_stdout = FileDelegate(s, 'stdout')
|
||||
self.delegate_stderr = FileDelegate(s, 'stderr')
|
||||
self.restricted_stdin = FileWrapper(sys.stdin)
|
||||
self.restricted_stdout = FileWrapper(sys.stdout)
|
||||
self.restricted_stderr = FileWrapper(sys.stderr)
|
||||
|
||||
def set_files(self):
|
||||
if not hasattr(self, 'save_stdin'):
|
||||
self.save_files()
|
||||
if not hasattr(self, 'delegate_stdin'):
|
||||
self.make_delegate_files()
|
||||
s = self.modules['sys']
|
||||
s.stdin = self.restricted_stdin
|
||||
s.stdout = self.restricted_stdout
|
||||
s.stderr = self.restricted_stdout
|
||||
sys.stdin = self.delegate_stdin
|
||||
sys.stdout = self.delegate_stdout
|
||||
sys.stderr = self.delegate_stderr
|
||||
|
||||
def reset_files(self):
|
||||
self.restore_files()
|
||||
s = self.modules['sys']
|
||||
self.restricted_stdin = s.stdin
|
||||
self.restricted_stdout = s.stdout
|
||||
self.restricted_stdout = s.stderr
|
||||
|
||||
|
||||
def save_files(self):
|
||||
self.save_stdin = sys.stdin
|
||||
self.save_stdout = sys.stdout
|
||||
self.save_stderr = sys.stderr
|
||||
|
||||
def restore_files(files):
|
||||
sys.stdin = self.save_sydin
|
||||
def restore_files(self):
|
||||
sys.stdin = self.save_stdin
|
||||
sys.stdout = self.save_stdout
|
||||
sys.stderr = self.save_stderr
|
||||
|
||||
|
|
Loading…
Reference in a new issue