Я не вижу лучшего способа. Код разработан для поддержки программы командной строки, и API, похоже, не предназначен для использования в качестве библиотеки.
Если вам действительно нужно использовать compileall, то вы можете подделать его с помощью этого хака, который замечает, что «quiet» проверяется на булевость в обработчике перехваченных исключений. Я могу переопределить это с отличным от нуля , проверить состояние исключения, чтобы увидеть, пришло ли оно из py_compile (quiet проверяется в других контекстах) и что-то сделать с этой информацией:
import sys
import py_compile
import compileall
class ReportProblem:
def __nonzero__(self):
type, value, traceback = sys.exc_info()
if type is not None and issubclass(type, py_compile.PyCompileError):
print "Problem with", repr(value)
raise type, value, traceback
return 1
report_problem = ReportProblem()
compileall.compile_dir(".", quiet=report_problem)
Förresten, det finns GothPy på första måndagen varje mnad, om du skulle ta sällskap med andra Python-anvandare i Gbg.