@@ -195,20 +195,30 @@ def request_from_main_greenlet(self, force_refresh=False):
195195
196196
197197class FakeOutput (object ):
198- def __init__ (self , coderunner , on_write ):
198+ def __init__ (self , coderunner , on_write , fileno = 1 ):
199199 """Fakes sys.stdout or sys.stderr
200200
201201 on_write should always take unicode
202+
203+ fileno should be the fileno that on_write will
204+ output to (e.g. 1 for standard output).
202205 """
203206 self .coderunner = coderunner
204207 self .on_write = on_write
208+ self .real_fileno = fileno
205209
206210 def write (self , s , * args , ** kwargs ):
207211 if not py3 and isinstance (s , str ):
208212 s = s .decode (getpreferredencoding (), 'ignore' )
209213 self .on_write (s , * args , ** kwargs )
210214 return self .coderunner .request_from_main_greenlet (force_refresh = True )
211215
216+ # Some applications which use curses require that sys.stdout
217+ # have a method called fileno. One example is pwntools. This
218+ # is not a widespread issue, but is annoying.
219+ def fileno (self ):
220+ return self .real_fileno
221+
212222 def writelines (self , l ):
213223 for s in l :
214224 self .write (s )
0 commit comments