我有一个 c++ 代码,它加载了一个使用 stderr 的 python 拦截器:
intereptor.pyx
stderr_dup = os.fdopen(sys.stderr.fileno(), 'wb', 0)
问题是调用Py_Finalize后,stderr关闭了,我在c++里用不了。 我应该用 C++ 重新打开它吗?
open(stderr)
或者我可以从 python 端 (os.dup/dup2) 阻止这种行为?
我厌倦了将上面的 fdopen 替换为:
stderr_dup = os.dup(sys.stderr.fileno())
但是 Py_Finalize 仍然关闭 stderr。
stderr_dup = os.fdopen(sys.stderr.fileno(), 'wb', 0, closefd=False)
来自文档:
如果 closefd 为 False 并且给出了文件描述符而不是文件名,则在文件关闭时底层文件描述符将保持打开状态。
int stderr_copy = dup(stderr);
// ... Python ...
dup2(stderr_copy, stderr);