subprocess: support universal_newlines
https://github.com/eventlet/eventlet/issues/243
This commit is contained in:

committed by
Thomas Goirand

parent
d44594ab3c
commit
96849ef941
@@ -55,8 +55,19 @@ class Popen(subprocess_orig.Popen):
|
|||||||
# eventlet.processes.Process.run() method.
|
# eventlet.processes.Process.run() method.
|
||||||
for attr in "stdin", "stdout", "stderr":
|
for attr in "stdin", "stdout", "stderr":
|
||||||
pipe = getattr(self, attr)
|
pipe = getattr(self, attr)
|
||||||
if pipe is not None and not type(pipe) == greenio.GreenPipe:
|
if pipe is not None and type(pipe) != greenio.GreenPipe:
|
||||||
wrapped_pipe = greenio.GreenPipe(pipe, pipe.mode, bufsize)
|
# https://github.com/eventlet/eventlet/issues/243
|
||||||
|
# AttributeError: '_io.TextIOWrapper' object has no attribute 'mode'
|
||||||
|
mode = getattr(pipe, 'mode', '')
|
||||||
|
if not mode:
|
||||||
|
if pipe.readable():
|
||||||
|
mode += 'r'
|
||||||
|
if pipe.writable():
|
||||||
|
mode += 'w'
|
||||||
|
# ValueError: can't have unbuffered text I/O
|
||||||
|
if bufsize == 0:
|
||||||
|
bufsize = -1
|
||||||
|
wrapped_pipe = greenio.GreenPipe(pipe, mode, bufsize)
|
||||||
setattr(self, attr, wrapped_pipe)
|
setattr(self, attr, wrapped_pipe)
|
||||||
__init__.__doc__ = subprocess_orig.Popen.__init__.__doc__
|
__init__.__doc__ = subprocess_orig.Popen.__init__.__doc__
|
||||||
|
|
||||||
|
@@ -64,3 +64,12 @@ def test_close_popen_stdin_with_close_fds():
|
|||||||
p.stdin.close()
|
p.stdin.close()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
assert False, "Exception should not be raised, got %r instead" % e
|
assert False, "Exception should not be raised, got %r instead" % e
|
||||||
|
|
||||||
|
|
||||||
|
def test_universal_lines():
|
||||||
|
p = subprocess.Popen(
|
||||||
|
[sys.executable, '--version'],
|
||||||
|
shell=False,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
universal_newlines=True)
|
||||||
|
p.communicate(None)
|
||||||
|
Reference in New Issue
Block a user