我想知道是否有一個技巧(很容易)將一些python代碼合併到moinmoin頁面中,可能通過添加一些action。這個想法是,像有沒有辦法將python代碼合併到moinmoin頁面中?
<<<
for j in [1,3,5]:
print(i)
>>>
顯示在頁面上
1
3
5
快速和骯髒的正常,安全不是一個問題,我想有這樣一個獨立的, 「desktop-mode」安裝。
我想知道是否有一個技巧(很容易)將一些python代碼合併到moinmoin頁面中,可能通過添加一些action。這個想法是,像有沒有辦法將python代碼合併到moinmoin頁面中?
<<<
for j in [1,3,5]:
print(i)
>>>
顯示在頁面上
1
3
5
快速和骯髒的正常,安全不是一個問題,我想有這樣一個獨立的, 「desktop-mode」安裝。
在你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())
在你的維基頁面,你現在應該能夠調用宏用:
<<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
,那麼你就可以進入一個頁面
{{{#!interpret_python
for j in [1,3,5]:
print(j)
}}}
和查看網頁時,就會產生文本
1
3
5
。通過將執行限制在sandbox可以使安全(r)。
感謝您的回答。爲了澄清,我希望能夠做的是在編輯模式下在頁面中放置一些任意的小型python代碼,並讓一些動作/宏使用我的代碼,通過python解釋器運行它,並在頁面上顯示輸出在觀看模式下。閱讀更多的文檔,我想我應該添加一個[解析器](http://moinmo.in/HelpOnParsers)。 – mitchus 2012-02-25 12:17:13
我修改了我的宏示例以適合您的需求。 – hoffmaje 2012-02-25 12:32:23
這看起來不錯!它不應該是'exec'而不是'eval'嗎? – mitchus 2012-02-25 12:40:09