Description
Feature or enhancement
Proposal:
When creating a sub-process using asyncio.create_subprocess_exec()
, it returns a Process
instance that has a stdout
property. This property is intended to be an asyncio version of the stdout
property of the Popen
instance from the subprocess
module.
An important aspect of Popen.stdout
property is that you can close it. This is a signal to the sub-process that is generating output that it should cleanly terminate. This is a common pattern in processes used in shell pipelines. Indeed, the object located at Popen.stdout
has a close()
method. This pattern is demonstrated below:
import subprocess
proc = subprocess.Popen(["yes"], stdout=subprocess.PIPE) # start subprocess
data = proc.stdout.read(4096) # get data
proc.stdout.close() # signal to process to cleanly shutdown
proc.wait() # wait for shutdown
Unfortunately this pattern cannot be reproduced easily with the stdout
property of the Process
instance returned from asyncio.create_subprocess_exec()
because stdout
is an instance of StreamReader
which does not have the close()
method.
I propose adding a close()
method to the StreamReader
class so that asyncio version of the subprocess
module may support this pattern of managing sub-processes. This change is consistent with the asyncio ecosystem as the companion StreamWriter
class already has a close()
method, along with other methods that expose its inner "transport" object. It's also trivial to implement, since it's essentially a wrapper method around the inner transport object's close()
method.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Linked PRs
Metadata
Metadata
Assignees
Projects
Status