Eryk Sun <[email protected]> added the comment:
>> If one of the processes in that list is gone, then (...) "The handle
>> is invalid" (...) will prevent you from creating any new processes
>> with Popen after that
>
> It's the first time that I see such bug report.
IIRC it's the second time I've seen that issue reported. It should be rare. It
should only occur if some other code in our process or another process closes
our _handle value. It's not our bug. Here's an example in 3.7:
>>> p = subprocess.Popen('python -c "input()"', stdin=subprocess.PIPE)
>>> del p
>>> subprocess._active
[<subprocess.Popen object at 0x0000015E5C94E160>]
>>> subprocess._active[0]._handle.Close()
The process is active, but something closed our handle. The next time
Popen.__init__ calls _cleanup, _internal_poll raises OSError due to the invalid
handle:
>>> subprocess.call('python -V')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Program Files\Python37\lib\subprocess.py", line 323, in call
with Popen(*popenargs, **kwargs) as p:
File "C:\Program Files\Python37\lib\subprocess.py", line 664, in __init__
_cleanup()
File "C:\Program Files\Python37\lib\subprocess.py", line 228, in _cleanup
res = inst._internal_poll(_deadstate=sys.maxsize)
File "C:\Program Files\Python37\lib\subprocess.py", line 1216, in
_internal_poll
if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] The handle is invalid
I wouldn't want _internal_poll to silence this error, but maybe it could be
translated into a warning. That said, since there's no need to wait on a
process in Windows, there's no need for __del__ to insert a running process in
a list of active process, in which case there's nothing for _cleanup to do.
Given we're in __del__, our private _handle is about to be closed, at least it
will be in CPython. Other implementations should wait() or use a with
statement, in order to explicitly close the process handle. The latter isn't
implemented currently, but you opened issue 37410 to address this.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue37380>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com