| 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