stderr, stdout, and errno 24

alisonken1 alisonken1 at gmail.com
Thu Jul 13 15:56:22 EDT 2006


Wesley Henwood wrote:
> I've checked and double checked my code and I am closing all files
> explicitly after opening them.  The only possibliy I can think of is
> Python opening files each time I run a script, or each time imput to
> stderr or stdout is redirected.
>
<snip>

The problem >I think< is that stout and stderr are not shared with each
invocation.

Since you're calling a python interpreter, the stdout/stderr from the
C++ program is not inherited - so now everytime you call the python
script, it's creating a new process.

With each new process, you're creating a new stdout/stderr handle, and
if you're calling outside of C++ relatively quickly (say more than 100
times a minute), then the old stdout/stderr handles have not had a
chance to be garbage collected - hence, you get too many files open
errors.

The workaround would possibly be to create a Python thread or create a
stdout fifo and a stderr fifo and have your script redirect these
outputs through the fifo buffers that you're C++ code can listen to.

Not sure how to do either one in MS environments, so you'll have to ask
someone else how to work with them.




More information about the Python-list mailing list