New submission from STINNER Victor:

A subprocess.Popen object contains many resources: pipes, a child process (its 
pid, and an handle on Windows), etc.

IMHO it's not safe to rely on the destructor to release all resources. I would 
prefer to release resources explicitly. For example, use proc.wait() or "with 
proc:".

Attached patch emits a ResourceWarning in Popen destructor if the status of the 
child process was not read yet.

The patch changes also _execute_child() to set the returncode on error, if the 
child process raised a Python exception. It avoids to emit a ResourceWarning on 
this case.

The patch fixes also unit tests to release explicitly resources. 
self.addCleanup(p.stdout.close) is not enough: use "with proc:" instead.

TODO: fix also the Windows implementation of _execute_child().

----------
components: Library (Lib)
messages: 263281
nosy: haypo, martin.panter, pitrou, serhiy.storchaka
priority: normal
severity: normal
status: open
title: subprocess.Popen should emit a ResourceWarning in destructor if the 
process is still running
type: resource usage
versions: Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue26741>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to