我正在编写一个嵌入Python解释器的c ++应用程序。如果从嵌入式解释器运行代码,我想安装自定义sys.excepthook
,但是当从控制台运行代码时,我不想安装自定义globals
。
通过Python C API文档,我遇到PyEval_GetGlobals(),我认为我可以使用它来获取对PyObject* PyEval_GetGlobals()
字典的引用,并在初始化嵌入式解释器时设置全局变量
NULL
返回值:借用参考。返回全球字典 当前执行帧中的变量,如果没有帧,则为NULL 目前正在执行。
不幸的是,此函数返回defmodule Plug.Router do
defmacro get(route, body) do
quote do
defp do_match("GET", unquote(route), var!(conn)) do
unquote(body[:do])
end
end
end
end
defmodule MyRouter do
import Plug.Router
def match(type, route) do
do_match(type, route, :dummy_connection)
end
get "/hello", do: {conn, "Hi!"}
get "/goodbye", do: {conn, "Bye!"}
MyRouter.match("GET", "/hello") |> IO.inspect
MyRouter.match("GET", "/goodbye") |> IO.inspect
end
,因为没有执行帧。有没有其他方法可以从C API插入全局变量?或者更好的方法来确定如何从Python端执行代码?