Instantly share code, notes, and snippets.

Embed
What would you like to do?
from docutils.parsers.rst import Directive
from docutils import nodes
import sys
import StringIO
__author__ = 'jp@apstra.com'
class ExecuteCode(Directive):
has_content = True
required_arguments = 0
optional_arguments = 1
config = {
'os_type': None,
}
def run(self):
if self.arguments:
language = self.arguments[0]
else:
language = 'python'
self.warning('this is another warning message')
code = '\n'.join(self.content)
output = StringIO.StringIO()
err = StringIO.StringIO()
sys.stdout = output
sys.stderr = err
exec code
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
results = []
results.append(output.getvalue())
results.append(err.getvalue())
results = ''.join(results)
results = nodes.literal_block(results, results)
literal = nodes.literal_block(code, code)
literal['language'] = language
literal['linenos'] = 'linenos' in self.options
return [literal, results]
def setup(app):
app.add_directive('execute_code', ExecuteCode)
return {'version': '0.1'}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment