おそらくいくつかのアクションを追加することによって、いくつかのpythonコードをmoinmoinページに(簡単に)組み込むためのトリックがあるかどうか疑問に思っていました。アイデアは、次のようなものです
<<<
for j in [1,3,5]:
print(i)
>>>
としてページに表示されます
1
3
5
クイック アンド ダーティは問題ありません。安全性は問題ではありません。これをスタンドアロンの「デスクトップ モード」インストール用に使用したいと考えています。
おそらくいくつかのアクションを追加することによって、いくつかのpythonコードをmoinmoinページに(簡単に)組み込むためのトリックがあるかどうか疑問に思っていました。アイデアは、次のようなものです
<<<
for j in [1,3,5]:
print(i)
>>>
としてページに表示されます
1
3
5
クイック アンド ダーティは問題ありません。安全性は問題ではありません。これをスタンドアロンの「デスクトップ モード」インストール用に使用したいと考えています。
別のアプローチは、パーサーを追加することです。
以下は、 MoinmoinのHelloWorldパーサーの非常に迅速で汚い適応です。
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
ページを表示するとき。実行をサンドボックスに限定することで、safe(r)にすることができます。
あなたの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")>>