mirror of
https://github.com/python/cpython.git
synced 2025-08-28 20:56:54 +00:00
bpo-38724: Implement subprocess.Popen.__repr__ (GH-17151)
This commit is contained in:
parent
143a97f641
commit
645005e947
3 changed files with 34 additions and 0 deletions
|
@ -978,6 +978,15 @@ class Popen(object):
|
||||||
|
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
obj_repr = (
|
||||||
|
f"<{self.__class__.__name__}: "
|
||||||
|
f"returncode: {self.returncode} args: {list(self.args)!r}>"
|
||||||
|
)
|
||||||
|
if len(obj_repr) > 80:
|
||||||
|
obj_repr = obj_repr[:76] + "...>"
|
||||||
|
return obj_repr
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def universal_newlines(self):
|
def universal_newlines(self):
|
||||||
# universal_newlines as retained as an alias of text_mode for API
|
# universal_newlines as retained as an alias of text_mode for API
|
||||||
|
|
|
@ -1360,6 +1360,30 @@ class ProcessTestCase(BaseTestCase):
|
||||||
self.addCleanup(p.stdin.close)
|
self.addCleanup(p.stdin.close)
|
||||||
p.communicate(b"x" * 2**20)
|
p.communicate(b"x" * 2**20)
|
||||||
|
|
||||||
|
def test_repr(self):
|
||||||
|
# Run a command that waits for user input, to check the repr() of
|
||||||
|
# a Proc object while and after the sub-process runs.
|
||||||
|
code = 'import sys; input(); sys.exit(57)'
|
||||||
|
cmd = [sys.executable, '-c', code]
|
||||||
|
result = "<Popen: returncode: {}"
|
||||||
|
|
||||||
|
with subprocess.Popen(
|
||||||
|
cmd, stdin=subprocess.PIPE, universal_newlines=True) as proc:
|
||||||
|
self.assertIsNone(proc.returncode)
|
||||||
|
self.assertTrue(
|
||||||
|
repr(proc).startswith(result.format(proc.returncode)) and
|
||||||
|
repr(proc).endswith('>')
|
||||||
|
)
|
||||||
|
|
||||||
|
proc.communicate(input='exit...\n')
|
||||||
|
proc.wait()
|
||||||
|
|
||||||
|
self.assertIsNotNone(proc.returncode)
|
||||||
|
self.assertTrue(
|
||||||
|
repr(proc).startswith(result.format(proc.returncode)) and
|
||||||
|
repr(proc).endswith('>')
|
||||||
|
)
|
||||||
|
|
||||||
def test_communicate_epipe_only_stdin(self):
|
def test_communicate_epipe_only_stdin(self):
|
||||||
# Issue 10963: communicate() should hide EPIPE
|
# Issue 10963: communicate() should hide EPIPE
|
||||||
p = subprocess.Popen(ZERO_RETURN_CMD,
|
p = subprocess.Popen(ZERO_RETURN_CMD,
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Add a repr for ``subprocess.Popen`` objects. Patch by Andrey Doroschenko.
|
Loading…
Add table
Add a link
Reference in a new issue