如何将Python代码嵌入MoinMoin页面?

2024-06-16 12:35:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有一个技巧可以(轻松地)将一些python代码合并到moinmoin页面中,也许是通过添加一些action。我的想法是

<<<
for j in [1,3,5]:
   print(i)
>>>

在页面上显示为

^{pr2}$

快速和肮脏是可以的,安全不是一个问题,我想有一个独立的,desktop-mode安装这个。在


Tags: 代码infor技巧modeaction页面print
2条回答

在您的moinmoin实例中,转到

data/macro

请确保有一个至少包含以下内容的\uuu init_uu.py:

^{pr2}$

然后在那里创建宏:

^{3}$

将此用作模板:

import StringIO
import sys

def macro_PyShell(macro, code):
  code_out = StringIO.StringIO()
  sys.stdout = code_out
  exec code.strip("'").strip('"')
  sys.stdout = sys.__stdout__
  return macro.request.formatter.text(code_out.getvalue())

在wiki页面中,您现在应该能够使用以下命令调用该宏:

<<PyShell("for i in [1,2,3]:\n  print i")>>

另一种方法是添加解析器。在

下面是Moinmoin's Hello World parser的一个非常快速和肮脏的改编。在

import StringIO
import sys

class Parser():        

    def __init__(self, raw, request, **kw):
        self.raw = raw
        self.request = request
        self.kw=kw

    def format(self, formatter):       
        # Execute the code
        code_out = StringIO.StringIO()
        sys.stdout = code_out
        exec self.raw
        sys.stdout = sys.__stdout__
        out_lines = code_out.getvalue().split("\n")

        # Print the output
        for out_line in out_lines:
            self.request.write(formatter.rawHTML(out_line+"<br>"))

如果它保存为path/to/MoinMoin/parser/interpret_python.py,那么您可以进入一个页面

^{pr2}$

它会产生文本

^{3}$

查看页面时。可以通过将执行限制为sandbox来保证安全(r)。在

相关问题 更多 >