Hi Cameron,
While you are waiting for an answer about the proper way to silence errors, I
can give you a work-around which will help with the metaphorical reams of
teletype paper you are printing out.
However, it is a very crude solution. Basically, close the C/C++ stderr file
descriptor, and tell Python to route its error messages to a new stderr.
# Copy the stderr descriptor
new_fd = os.dup(2)
# Close the original stderr
os.close(2)
# Tell Python about the new stderr
sys.__stderr__ = sys.stderr = os.fdopen(new_fd, "w", 0)
Here it is in context:
import os
import sys
from rdkit import Chem
print("Error?")
Chem.MolFromSmiles("Q") # error message
# Copy the stderr descriptor
new_fd = os.dup(2)
# Close the original stderr
os.close(2)
# Tell Python about the new stderr
sys.__stderr__ = sys.stderr = os.fdopen(new_fd, "w", 0)
print("Error again?")
Chem.MolFromSmiles("Q") # No warning or error message.
This assumes that neither RDKit nor some other code at the C level write
directly to file descriptor 2 assuming it's stderr. Otherwise there's a problem
if you ever open up a new file and it's assigned fd 2. If you *really* want to
be sure that C/C++ code doesn't write to stderr, and the above doesn't work,
and you are on a Unix-like system, then add the following after the
"sys.__stderr__ = .." line:
# Reroute the original descriptor number 2 to /dev/null
fd2 = os.open("/dev/null", os.O_WRONLY)
if fd2 != 2:
raise SystemExit("Unable to reroute file descriptor 2: %d\n" % (fd2,))
Andrew
[email protected]
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Rdkit-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss