Не удается перехватить / перенаправить предупреждения OpenBabel в python/pybel
Я использую pybel для преобразования 1000 строк SMILES в базе данных в каноническую форму. Когда я делаю это, я получаю около 300 предупреждений. Большинство из них:
==============================
*** Open Babel Warning in OpenBabel::OBSmilesParser::ParseSmiles
Ignoring stereochemistry. Not enough connections to this atom.
==============================
Я думаю, никто не думал, что было бы важно включить строку с проблемой.
Я предполагал, что предупреждения будут написаны sys.stderr
, Видимо, это правда, потому что эта командная строка: python foo.py 2> err.txt
отправил предупреждения в файл. Но предупреждения оказались забуференными. Поэтому я попытался смывать sys.stderr
до и после записи строки для преобразования, как показано ниже.
def canonicalize(smiles):
"""
Returns canonical form of a SMILES string. Uses OpenBabel.
"""
print(file=sys.stderr, flush=True)
print(smiles,file=sys.stderr,flush=True)
canonicalizer = OBConversion()
canonicalizer.SetOutFormat('smi')
canonicalizer.SetOptions('inc', OBConversion.OUTOPTIONS)
c = canonicalizer.WriteString(readstring('smi', smiles).OBMol)[:-1]
print(file=sys.stderr, flush=True)
print("----->", c, file=sys.stderr)
print(file=sys.stderr, flush=True)
return c
Но я все еще получаю асинхронные результаты. (Как вы можете видеть по номерам строк в этом поиске, предупреждения выходят в группе, на самом деле около 35 предупреждений в этом скоплении.)
Line 2965: Ignoring stereochemistry. Not enough connections to this atom.
Line 2968: Ignoring stereochemistry. Not enough connections to this atom.
Line 2971: Ignoring stereochemistry. Not enough connections to this atom.
Line 2974: Ignoring stereochemistry. Not enough connections to this atom.
Line 2977: Ignoring stereochemistry. Not enough connections to this atom.
Как я могу записать свою трассировку в то же место, что и OpenBabel, либо перенаправив его поток на stderr в python, либо захватив его поток и записав в него из python, либо просто сбросив его буферы из python?