标签: pyobject

Python:获取PyObject的字符串表示形式?

我有一个C python扩展,我想打印一些诊断.

我收到一个字符串作为PyObject*.

获取此对象的字符串rep的规范方法是什么,这样它可以用作const char*?

更新:澄清以强调访问为const char*.

python string pyobject

40
推荐指数
3
解决办法
2万
查看次数

检查PyObject是否为None

我想检查PyObject一下我是否有None.我天真地期望None Pyobject *从函数返回的任何东西都是NULL指针,但似乎并非如此.

那么:我如何检查我的一个是否PyObject *指向一个None物体?

我知道有像PyInt_Check(PyObject *)周围的宏,但我找不到类似的东西PyNone_Check.我以为我可以检查我PyObject和之间的平等Py_None,但事实证明我甚至不知道如何与这个库进行相等比较.

c++ python pyobject nonetype

19
推荐指数
1
解决办法
3371
查看次数

腌制定义为具有PyObject *成员的C结构的Python扩展类型

我正在通过Python运行C ++代码,并希望选择一个扩展类型。

因此,我有一个C ++结构(py_db_manager),其中包含指向数据库对象的指针和一个对象管理器对象(均以C ++编写),并用python类型的对象(t_db_manager)包装。我的问题是,此python类型需要知道如何腌制两个指针才能将其发送给某些子多核进程。因此,我在copy_reg模块中注册了该类型(这相当于在该类型上编写一个reduce()方法。但是,我不太确定要在其中添加什么。应该使用PyObject *还是仅使用整数指针?有人可以帮忙吗?

typedef struct
{
  PyObject_HEAD
  PyObject* man_inst_ ;
  PyObject* db_inst_ ;

}py_db_manager;`
Run Code Online (Sandbox Code Playgroud)

这是Py_TypeObject

PyTypeObject t_db_manager = {
    PyObject_HEAD_INIT(0)               /* tp_head */
    0,                                  /* tp_internal */
    ".py_db_manager",                  /* tp_name */
    sizeof(py_db_manager)};
Run Code Online (Sandbox Code Playgroud)

这是reduce方法中的代码:

PyObject *pickle_manager(PyObject *module, PyObject *args)
{
    py_db_manager *cpp_manager =0;
    PyObject *values = NULL,
        *tuple = NULL;
    char text[512];

    if (!PyArg_ParseTuple(args, "O!", &t_db_manager, &cpp_manager))
        goto error;
    sprintf(text,"man_inst_, db_inst_");
    if ((values = Py_BuildValue("(sii)", text,
                                cpp_manager->man_inst_, cpp_manager->db_inst_)) == NULL)
        goto error;
    tuple = …
Run Code Online (Sandbox Code Playgroud)

c python struct pickle pyobject

5
推荐指数
1
解决办法
991
查看次数

如何将PyObject_IsInstance与非内置类用作第二个参数?

在C / C ++中,我想查看a PyObject是否是实例。不幸的是,该PyInstance_Check宏不适用于新型类。

因此,根据我阅读的论坛帖子,PyObject_IsInstance可以解决此问题。但是,我发现的所有示例都演示了与内置类型(例如int和字符串)的比较。

我想知道如何构造一个表示类型的类的PyObject,因此可以将其传递给的第二个参数PyObject_IsInstance。你能帮助我吗?

c python instance pyobject

5
推荐指数
1
解决办法
2239
查看次数

Julia:将PyObject转换为数组

在Julia,我正在调用Python模块pandas_datareader来从Web下载数据:

using PyCall
@pyimport datetime
@pyimport pandas_datareader.data as web
gdp = web.DataReader("GDPCA","fred",start=datetime.datetime(1929,1,1))
Run Code Online (Sandbox Code Playgroud)

变量gdp是PyObject对象.因此,我无法操纵它(以日志为例).如何将其转换为数组?我试过转换(Array {Float64,2},gdp),但它只会崩溃朱莉娅.

谢谢!

pyobject julia

5
推荐指数
1
解决办法
778
查看次数

如何确定用于声明 PyObject 实例布局的结构体?

我正在用 C++ 编写 Python 3 扩展,并且正在尝试找到一种方法来检查 a 是否PyObject与定义其实例布局的类型(结构)相关。我只对 static-size 感兴趣PyObject,而不是PyVarObject. 实例布局由具有某些明确定义的布局的结构体定义:强制PyObject标头和(可选)用户定义的成员。

下面是基于定义新类型中PyObject著名的 Noddy 示例的扩展示例:

// Noddy struct specifies PyObject instance layout
struct Noddy {
    PyObject_HEAD
    int number;
};

// type object corresponding to Noddy instance layout
PyTypeObject NoddyType = {
    PyObject_HEAD_INIT(NULL)
    0,                         /*ob_size*/
    "noddy.Noddy",             /*tp_name*/
    sizeof(Noddy),             /*tp_basicsize*/
    0,                         /*tp_itemsize*/
    ...
    Noddy_new,                 /* tp_new */
};
Run Code Online (Sandbox Code Playgroud)

值得注意的是,它Noddy是一种类型、一个编译时实体,但NoddyType它是运行时存在于内存中的一个对象。Noddy和之间唯一明显的关系NoddyType似乎是sizeof(Noddy)存储在tp_basicsize成员中的值。

在 …

python api python-3.x pyobject

4
推荐指数
1
解决办法
1012
查看次数

使用Py_BuildValue()在C中创建元组列表

我想用来Py_BuildValue()在C中创建一个元组列表.

我想要构建的内容如下所示:

[ (...), (...), ... ] 
Run Code Online (Sandbox Code Playgroud)

我不知道在编译时创建的元组数量,所以我不能在这里使用一些静态数量.

Py_BuildValue()这里基本上使用一个元组是代码的样子:

PyObject * Py_BuildValue("[(siis)]", name, num1, num2, summary);
Run Code Online (Sandbox Code Playgroud)

但那只会是一个元组.我需要在列表中有多个元组,我可以通过for循环添加.我怎么能做到这一点?

c python pyobject

4
推荐指数
1
解决办法
3267
查看次数

python Gtk.PrintOperation打印pdf

到目前为止,我使用此代码的变体来打印我用pisa创建的pdf.

这取自pygtk faq:

import gtk
import gtkunixprint

def print_cb(printjob, data, errormsg):
    if errormsg:
        print('Error occurred while printing:\n%s' % errormsg)

filename = 'the_pdf_file_to_be_printed.pdf'
pud = gtkunixprint.PrintUnixDialog()
response = pud.run()
if response == gtk.RESPONSE_OK:
    printer = pud.get_selected_printer()
    settings = pud.get_settings()
    setup = pud.get_page_setup()
    printjob = gtkunixprint.PrintJob('Printing %s' % filename, printer, settings, setup)
    printjob.set_source_file(filename)
    printjob.send(print_cb)
pud.destroy()
Run Code Online (Sandbox Code Playgroud)

现在我移植到Gtk3 PyObject,我无法解决问题.我发现Gtk.PrintOperation是方式,但我不能将打印操作与printJob或如何传递文件进行打印相关联.
谢谢

python gtk3 pyobject

3
推荐指数
1
解决办法
1157
查看次数

如何将 Python 程序从 gtk2 移植到 gtk3?

我们正在尝试将这个程序从 gtk2 移植到 gtk3。当我尝试时pygi-convert.sh,出现以下错误:

Traceback (most recent call last):
  File "scripts/amir", line 53, in <module>
    from gi.repository import GObject
  File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 39, in <module>
    raise ImportError(_static_binding_error)
ImportError: When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject". See: https://bugzilla.gnome.org/show_bug.cgi?id=709183
Run Code Online (Sandbox Code Playgroud)

任何建议或其他方式来做这个端口?

python gtk pygtk python-3.x pyobject

3
推荐指数
1
解决办法
1376
查看次数

Python C API:尝试构建字典时出现问题

我正在尝试使用 C API 构建 Python 字典,但似乎不可能(Py_BuildValue 返回 NULL 对象)使用 PyObject* 作为值。我有这样的情况:

#include <python3.5/Python.h>
...
PyObject *myList = PyList_New(1);
PyList_SetItem(myList, 0, Py_BuildValue("i", 1));
dict = Py_BuildValue("{siso}",
           "anInt", myInt,
           "aList", mylist);
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种适用于列表通用大小的解决方案。我在官方文档中没有找到任何有关此内容的信息,并且还用谷歌搜索了几个小时。有人可以帮助我吗?提前致谢

python cpython python-c-api pyobject

3
推荐指数
1
解决办法
2684
查看次数

使用C++,PyObject中的参数创建Python构造函数

我有一个A像这样的python类.

class A: 
   def __init__(self, name): 
       self.name = name

   def print_lastname(self, lastname): 
       print(lastname)
Run Code Online (Sandbox Code Playgroud)

我必须像这样调用这个代码.

import B
a = B.A("hello")
a.print_lastname("John")
Run Code Online (Sandbox Code Playgroud)

目前,我需要A从我的C++代码中使用这个类.我到目前为止.

Py_Initialize(); 
string hello = "hello"; 
PyObject *module, *attr, *arg; 
module = PyObject_ImportModule("B"); // import B
attr = PyObject_GetAttrString(module, "A"); // get A from B
arg = PyString_FromString(hello.c_str()); 
instance = PyInstance_New(attr, arg, NULL); // trying to get instance of A with parameter "hello"
Py_Finalize(); 
Run Code Online (Sandbox Code Playgroud)

但我收到了错误

异常TypeError:来自'/usr/lib64/python2.7/threading.pyc'的模块'threading'中的'参数列表必须是元组'

如何从C import语句到a.print_name("John")C++实现?任何帮助表示赞赏.

c++ python tuples python-embedding pyobject

2
推荐指数
1
解决办法
558
查看次数

如何在Python中处理来自C++的PyObject*

我创建了用C++编写的DLL,导出函数返回PyObject*.然后我使用ctypes在Python中导入DLL.现在,我怎样才能得到真正的PyObject?

这是c ++代码的一部分:

PyObject* _stdcall getList(){

    PyObject * PList = NULL;
    PyObject * PItem = NULL;
    PList = PyList_New(10);

    vector <int> intVector;
    int i;
    for(int i=0;i<10;i++){
        intVector.push_back(i);
    }

    for(vector<int>::const_iterator it=intVector.begin();it<intVector.end();it++){
        PItem = Py_BuildValue("i", &it);
        PyList_Append(PList, PItem);
    }
    return PList;
}
Run Code Online (Sandbox Code Playgroud)

和一些python代码:

dll = ctypes.windll.LoadLibrary(DllPath)
PList = dll.getList()
Run Code Online (Sandbox Code Playgroud)

*我想获得包含1,2,3,4 ... 10的真正的python列表?* 我是否清楚?谢谢你

c++ python dll ctypes pyobject

1
推荐指数
2
解决办法
3269
查看次数