从 CAPI 评估 Python 代码并获取输出
我正在尝试从嵌入式 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
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().
我有二进制字符串,但由于字符串以空字符结尾,因此无法将其作为字符串返回。
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
}