Show More
@@ -221,17 +221,18 def protectstdio(uin, uout): | |||||
221 | "owned" in that print(), exec(), etc. never reach to them. |
|
221 | "owned" in that print(), exec(), etc. never reach to them. | |
222 | """ |
|
222 | """ | |
223 | uout.flush() |
|
223 | uout.flush() | |
224 | newfiles = [] |
|
|||
225 | nullfd = os.open(os.devnull, os.O_RDWR) |
|
224 | nullfd = os.open(os.devnull, os.O_RDWR) | |
226 | for f, sysf, mode in [(uin, stdin, r'rb'), |
|
225 | fin, fout = uin, uout | |
227 | (uout, stdout, r'wb')]: |
|
226 | if uin is stdin: | |
228 | if f is sysf: |
|
227 | newfd = os.dup(uin.fileno()) | |
229 |
|
|
228 | os.dup2(nullfd, uin.fileno()) | |
230 | os.dup2(nullfd, f.fileno()) |
|
229 | fin = os.fdopen(newfd, r'rb') | |
231 | f = os.fdopen(newfd, mode) |
|
230 | if uout is stdout: | |
232 | newfiles.append(f) |
|
231 | newfd = os.dup(uout.fileno()) | |
|
232 | os.dup2(nullfd, uout.fileno()) | |||
|
233 | fout = os.fdopen(newfd, r'wb') | |||
233 | os.close(nullfd) |
|
234 | os.close(nullfd) | |
234 | return tuple(newfiles) |
|
235 | return fin, fout | |
235 |
|
236 | |||
236 | def restorestdio(uin, uout, fin, fout): |
|
237 | def restorestdio(uin, uout, fin, fout): | |
237 | """Restore (uin, uout) streams from possibly duplicated (fin, fout)""" |
|
238 | """Restore (uin, uout) streams from possibly duplicated (fin, fout)""" |
General Comments 0
You need to be logged in to leave comments.
Login now