7
7
class Spinner (object ):
8
8
spinner_cycle = itertools .cycle (['-' , '/' , '|' , '\\ ' ])
9
9
10
- def __init__ (self , beep = False , disable = False , force = False ):
10
+ def __init__ (self , beep = False , disable = False , force = False , stream = sys . stdout ):
11
11
self .disable = disable
12
12
self .beep = beep
13
13
self .force = force
14
+ self .stream = stream
14
15
self .stop_running = None
15
16
self .spin_thread = None
16
17
17
18
def start (self ):
18
19
if self .disable :
19
20
return
20
- if sys . stdout .isatty () or self .force :
21
+ if self . stream .isatty () or self .force :
21
22
self .stop_running = threading .Event ()
22
23
self .spin_thread = threading .Thread (target = self .init_spin )
23
24
self .spin_thread .start ()
@@ -29,11 +30,11 @@ def stop(self):
29
30
30
31
def init_spin (self ):
31
32
while not self .stop_running .is_set ():
32
- sys . stdout .write (next (self .spinner_cycle ))
33
- sys . stdout .flush ()
33
+ self . stream .write (next (self .spinner_cycle ))
34
+ self . stream .flush ()
34
35
time .sleep (0.25 )
35
- sys . stdout .write ('\b ' )
36
- sys . stdout .flush ()
36
+ self . stream .write ('\b ' )
37
+ self . stream .flush ()
37
38
38
39
def __enter__ (self ):
39
40
self .start ()
@@ -44,12 +45,12 @@ def __exit__(self, exc_type, exc_val, exc_tb):
44
45
return False
45
46
self .stop ()
46
47
if self .beep :
47
- sys . stdout .write ('\7 ' )
48
- sys . stdout .flush ()
48
+ self . stream .write ('\7 ' )
49
+ self . stream .flush ()
49
50
return False
50
51
51
52
52
- def spinner (beep = False , disable = False , force = False ):
53
+ def spinner (beep = False , disable = False , force = False , stream = sys . stdout ):
53
54
"""This function creates a context manager that is used to display a
54
55
spinner on stdout as long as the context has not exited.
55
56
@@ -73,7 +74,7 @@ def spinner(beep=False, disable=False, force=False):
73
74
do_something_else()
74
75
75
76
"""
76
- return Spinner (beep , disable , force )
77
+ return Spinner (beep , disable , force , stream )
77
78
78
79
79
80
from ._version import get_versions
0 commit comments