testdir.popen: use kwargs with defaults for stdout/stderr

This commit is contained in:
Daniel Hahler 2019-04-06 12:09:31 +02:00
parent 9ad00714ba
commit 4fca86e2af
3 changed files with 28 additions and 1 deletions

View File

@ -0,0 +1 @@
pytester's ``Testdir.popen()`` uses ``stdout`` and ``stderr`` via keyword arguments with defaults now (``subprocess.PIPE``).

View File

@ -1034,7 +1034,14 @@ class Testdir(object):
if colitem.name == name:
return colitem
def popen(self, cmdargs, stdout, stderr, stdin=CLOSE_STDIN, **kw):
def popen(
self,
cmdargs,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=CLOSE_STDIN,
**kw
):
"""Invoke subprocess.Popen.
This calls subprocess.Popen making sure the current working directory

View File

@ -540,3 +540,22 @@ def test_popen_stdin_bytes(testdir):
assert stdout.decode("utf8").splitlines() == ["input", "2ndline"]
assert stderr == b""
assert proc.returncode == 0
def test_popen_default_stdin_stderr_and_stdin_None(testdir):
# stdout, stderr default to pipes,
# stdin can be None to not close the pipe, avoiding
# "ValueError: flush of closed file" with `communicate()`.
p1 = testdir.makepyfile(
"""
import sys
print(sys.stdin.read()) # empty
print('stdout')
sys.stderr.write('stderr')
"""
)
proc = testdir.popen([sys.executable, str(p1)], stdin=None)
stdout, stderr = proc.communicate(b"ignored")
assert stdout.splitlines() == [b"", b"stdout"]
assert stderr.splitlines() == [b"stderr"]
assert proc.returncode == 0