我想知道是否有一个技巧(轻松)将一些python代码合并到moinmoin页面中,可能通过添加一些action。这个想法是像
这样的东西<<<
for j in [1,3,5]:
print(i)
>>>
在页面上显示为
1
3
5
快速和肮脏是可以的,安全性不是问题,我希望将其用于独立的“desktop-mode”安装。
答案 0 :(得分:7)
另一种方法是添加解析器。
以下是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
,则可以进入页面
{{{#!interpret_python
for j in [1,3,5]:
print(j)
}}}
它将生成文本
1
3
5
查看页面时。可以通过将执行限制为sandbox来使安全(r)。
答案 1 :(得分:4)
在你的moinmoin实例中转到
data/macro
确保__init__.py至少包含以下内容:
from MoinMoin.util import pysupport
modules = pysupport.getPackageModules(__file__)
然后在那里创建你的宏:
touch PyShell.py
将此作为模板使用:
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")>>