从 CAPI 评估 Python 代码并获取输出

发布于 2024-12-11 06:25:46 字数 356 浏览 0 评论 0原文

我正在尝试从嵌入式 Python C API 模拟 code.InteractiveInterpreter 。我使用 PyEval_Evalcode 来评估用户输入。我正在尝试评估解释器中的用户输入并将输出作为字符串返回(就像解释器一样)。但是,PyEval_Evalcode 返回包装在 PyObject* 中的多种数据类型。有什么办法可以做我想做的事吗?

限制:需要使用嵌入 API 来完成。无法使用 PyRun_RunSimpleString() 并放置 code.InteractiveInterpreter 来完成。

I'm trying to emulate code.InteractiveInterpreter from the embedded Python C API. I'm using PyEval_Evalcode to evaluate the user input. I am trying to evaluate user input in the interpreter and return the output as a string (just like the interpreter would). However, PyEval_Evalcode returns a multitude of datatypes wrapped in PyObject*. Is there any way to do what I am trying to do?

Constraints: It needs to be done using the embedding api. Cannot be done using PyRun_RunSimpleString() and laying down a code.InteractiveInterpreter.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

絕版丫頭 2024-12-18 06:25:46

PyEval_Evalcode() 返回的对象可以使用 PyObject_Repr() 或 PyObject_Str() 转换为 Python 字符串。可以使用 PyString_AsString() 将生成的 Python 字符串转换为常规 C 字符串。

The object returned by PyEval_Evalcode() can be transformed to a Python string using PyObject_Repr() or PyObject_Str(). The resultant python string can be turned into a regular C string with PyString_AsString().

娇柔作态 2024-12-18 06:25:46

我有二进制字符串,但由于字符串以空字符结尾,因此无法将其作为字符串返回。

if(PyString_Check(pValue))
{
const char* s=/*PyBytes_AsString*/PyString_AsString(PyObject_Repr(pValue)); //返回ascii的十六进制表示
int sz=PyString_Size(pValue);//大小有效
const char* s= PyString_AsString(pValue);//仅返回以下以 null 结尾的字符串
}

I have binary string and cannot return it as string because of null terminated string.

if(PyString_Check(pValue))
{
const char* s=/*PyBytes_AsString*/PyString_AsString(PyObject_Repr(pValue)); //return hex representation in ascii
int sz=PyString_Size(pValue);//size is valid
const char* s= PyString_AsString(pValue);//return only below null terminated string
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文