Reputation: 177
I am developing a sphinx based collaborative writing tool. Users access the web application (developed in python/Flask) to write a book in sphinx and compile it to pdf.
I have learned that in order to compile a sphinx documentation from within python I should use
import sphinx
result = sphinx.build_main(['-c', 'path/to/conf',
'path/to/source/', 'path/to/out'])
So far so good.
Now my users want the app to show them their syntax mistakes. But the output (result
in the example above) only gives me the exit code.
So, how do I get a list of warnings from the build process?
Perhaps I am being too ambitious, but since sphinx is a python tool, I was expecting to have a nice pythonic interface with the tool. For example, the output of sphinx.build_main
could be a very rich object with warnings, line numbers...
On a related note, the argument to the method sphinx.build_main
looks just like a wrapper to the command line interface.
Upvotes: 4
Views: 2522
Reputation: 51012
sphinx.build_main()
calls sphinx.cmdline.main()
, which in turn creates a sphinx.application.Sphinx
object. You could create such an object directly (instead of "making system calls within python"). Use something like this:
import os
from sphinx.application import Sphinx
# Main arguments
srcdir = "/path/to/source"
confdir = srcdir
builddir = os.path.join(srcdir, "_build")
doctreedir = os.path.join(builddir, "doctrees")
builder = "html"
# Write warning messages to a file (instead of stderr)
warning = open("/path/to/warnings.txt", "w")
# Create the Sphinx application object
app = Sphinx(srcdir, confdir, builddir, doctreedir, builder,
warning=warning)
# Run the build
app.build()
Upvotes: 5
Reputation: 15065
Assuming you used sphinx-quickstart
to generate your initial Sphinx documentation set with a makefile, then you can use make
to build docs, which in turn uses the Sphinx tool sphinx-build
. You can pass the -w <file>
option to sphinx-build
to write warnings and errors to a file as well as stderr
.
Note that options passed through the command line override any other options set in the makefile and conf.py
.
Upvotes: 3