标签: python-bindings

有没有办法使用Selenium和Python绑定执行鼠标悬停(悬停在元素上)?

在这里阅读,显然曾经是一个带有悬停方法的RenderedWebElement类.但是,它专门用于Java(在这里搜索python绑定文档无济于事),因此已被弃用于Java.

无法使用action_chains(方法列表)执行悬停,也不能使用webelement(方法列表)对象执行悬停.

有关如何为python执行此操作的任何想法?在这里,但它使用RenderedWebElement,因此没有太多帮助.

Python 2.7,Windows Vista,Selenium 2,Python绑定

编辑:对于selenium.selenium.selenium对象有一个方法"mouse_over",但我无法想象一种方法来创建一个实例,而不必运行独立服务器.

问题已经回答:如果您有误解,请仔细阅读标记为答案的回复评论!

python selenium python-bindings selenium-webdriver

44
推荐指数
2
解决办法
6万
查看次数

生成python绑定,使用哪些方法/程序

我正在我的程序中使用python(CPython)来允许我的环境中的用户脚本,并允许我使用pyside,c ++的qt绑定为我的应用程序创建GUI.这些可以有效地分离,以后可以编译GUI python代码以获得速度(如果可能的话).

我是python的新手,我真的在寻找最有效的方法来生成可靠的最小额外代码来生成实体绑定,因为随着项目的发展,绑定可能会经常发生变化.我需要它,以便python类扩展具有虚拟的c ++类.

我已经研究过PyBindGen,它在我的库中的东西上经常窒息,因为它实际上很有用.

您在这方面建议的任何帮助/建议/链接/工作流程都非常有用.

c++ python python-bindings

17
推荐指数
2
解决办法
7146
查看次数

PyPy - SWIG - QuickFix混音

PyPy有一些兼容性限制,特别是关于CPython C API.

我使用QuickFix包附带预编译的SWIG绑定,我正在考虑将它与PyPy一起使用.由于我不熟悉C API和SWIG,我的问题是:

  • PyPy的C API兼容性限制是否会妨碍SWIG的工作?你能解释一下原因吗?
  • 我是否需要重新编译SWIG绑定才能使用PyPy?那可能吗?怎么样?

swig pypy quickfix python-bindings

8
推荐指数
1
解决办法
1430
查看次数

可以在Python 3中使用Clutter吗?

Clutter有Python 3绑定吗?如果是这样,我怎样才能获得并使用它们?

clutter python-3.x python-bindings

6
推荐指数
1
解决办法
1380
查看次数

使用 PyArg_ParseTuple 解析用户定义的类型

如何使用 解析用户定义的类型(或来自现有非标准库的类型)PyArg_ParseTuple

python python-c-api python-2.7 python-bindings

6
推荐指数
2
解决办法
1422
查看次数

如何捆绑外部 CMake 依赖项来生成 Python 包?

我正在尝试为OpenVSlam项目生成 Python 绑定。

我正在使用 PyBind11 并遵循cmake_example模板。

我在我的开发环境中成功构建了该.so文件pybind11_add_module,其中安装了所有依赖项(例如 OpenCV、Protobuf 等库)。该.so文件在此开发环境中运行良好。我可以正确运行import sys; sys.path.append('.'); import openvslam_python;和使用绑定函数。但是,我想将该.so文件作为 Python 包发送。

问题是,当我运行python3 setup.py sdist bdist_wheel并尝试wheel在另一个环境(没有安装的依赖项)上安装结果时,它说找不到依赖项的.so文件。例如,它输出以下错误(在 Docker 容器中):

>>> import sys
>>> sys.path.append('.')
>>> import openvslam_python
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libopenvslam.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法将 PyBind11 绑定的依赖项与 CMake(或者可能在脚本内setup.py)捆绑在一起,以便能够在没有安装任何依赖项的环境中安装它们。这样,我可以使用简单的pip install …

python cmake python-bindings pybind11

6
推荐指数
0
解决办法
315
查看次数

如何将 python 绑定添加到 C#?

当你想从 python 调用 C 时,你写一个这样的模块:

http://docs.python.org/extending/extending.html

现在,我有一个问题:

我想用 C# 编写一个在 Python 中使用的模块。

如何让 C# 与原生 Python 交互?
(注意:我对 Python.NET 或 IronPython 不感兴趣)。

.net c# python python-bindings

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

Cython 字节到 C char*

我正在尝试为 CPython 编写 Cython 扩展来包装 mcrypt 库,以便我可以将它与 Python 3 一起使用。但是,我在尝试使用 mcrypt API 之一时遇到了段错误的问题。

失败的代码是:

def _real_encrypt(self, source):
    src_len = len(source)
    cdef char* ciphertext = source
    cmc.mcrypt_generic(self._mcStream, <void *>ciphertext, src_len)
    retval = source[:src_len]
    return retval
Run Code Online (Sandbox Code Playgroud)

现在,按照我理解 Cython 文档的方式,第 3 行的赋值应该将缓冲区的内容(Python 3 中的一个对象)复制到 C 字符串指针。我认为这也意味着它将分配内存,但是当我进行此修改时:

def _real_encrypt(self, source):
    src_len = len(source)
    cdef char* ciphertext = <char *>malloc(src_len)
    ciphertext = source
    cmc.mcrypt_generic(self._mcStream, <void *>ciphertext, src_len)
    retval = source[:src_len]
    return retval
Run Code Online (Sandbox Code Playgroud)

它仍然因段错误而崩溃。它在 mcrypt_generic 内部崩溃,但是当我使用普通的 C 代码时,我能够让它正常工作,所以必须有一些我不太了解 Cython 在这里如何处理 C 数据的东西。

谢谢你的帮助!

ETA:问题是我的一个错误。在醒了太多小时后我正在研究这个(这不是我们在某个时候都做过的事情吗?)并且错过了一些愚蠢的事情。我现在拥有的有效代码是:

def …
Run Code Online (Sandbox Code Playgroud)

python cython python-3.x python-bindings

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

在C++静态boost :: shared_ptr中保存python生成的值

在使用Boost.Python和C++时,有时我们会创建使用类本身和boost::shared_ptr<>版本绑定的类.由于许多原因,这非常方便,可以在很多地方使用.但是,当boost::python返回一个boost::shared_ptr<>在Python中生成并记录在C++静态变量上的值时,该机制似乎无法可靠地工作.

通常情况下,我希望返回的人会有boost::shared_ptr<>一个特殊的删除器来处理这个问题,但事实似乎并非如此.似乎发生的事情是返回的boost::shared_ptr只是包含一个指向Python中生成的值的指针,没有任何特殊考虑删除.这会导致双重删除(一个来自Python解释器本身,一个来自C++静态)的一致崩溃 - 或者至少看起来像它.

要使用下面的代码重现此行为,请创建如下所示的test.cc文件并使用以下脚本进行测试.

#include <boost/python.hpp>
#include <boost/shared_ptr.hpp>

struct A {
  std::string _a;
  A(std::string a): _a(a) {}
  std::string str() { return _a; }
};

static boost::shared_ptr<A> holder(new A("foo"));

static void set_holder(boost::shared_ptr<A> a_ptr) {
  holder = a_ptr;
}

static boost::shared_ptr<A> get_holder() {
  return holder;
}

BOOST_PYTHON_MODULE(test)
{
  using namespace boost::python;

  class_<A, boost::shared_ptr<A> >("A", init<std::string>())
    .def("__str__", &A::str)
    ;

  def("set_holder", &set_holder);
  def("get_holder", &get_holder);
}
Run Code Online (Sandbox Code Playgroud)

使用以下Python测试程序:

import test
print(str(test.get_holder())) …
Run Code Online (Sandbox Code Playgroud)

c++ boost shared-ptr boost-python python-bindings

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

Boost.Python是否需要为其他boost库绑定代码?

我有一个继承自boost :: statechart库的类.我需要在Python脚本中使用这个类,我想知道我是否需要为所有boost :: statechart库编写包装代码(.def s),因为我的类继承了它?或者boost.python不需要任何包装代码来查看定义(它自动处理其他boost库以在python中调用)?

c++ boost boost-statechart boost-python python-bindings

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

Python 绑定的 RPATH 传播失败

onnxruntime我正在构建一个在底层使用的库(Ubuntu 22) 。反过来,onnxruntime使用 CUDA,动态加载一些专用的“后端”。我构建了除 CUDA 库之外的整个代码堆栈,并且没有一个库具有其RPATHRUNPATH设置(使用 进行双重检查readelf -d)。

我构建了两个应用程序,一个是 C++,并直接链接到我的库。该应用程序有其RPATH设置,一切正常。如果我运行它,LD_DEBUG=libs我会看到类似这样的内容(请注意,路径已被编辑,并且我仅显示调试输出的一小部分):

    158834:     calling init: .../install/bin/../lib/libonnxruntime_providers_cuda.so
    158834:
    158834:     find library=libcudnn_ops_infer.so.8 [0]; searching
    158834:      search path=.../install/bin/../lib         (RPATH from file .../install/bin/test)
    158834:       trying file=.../install/bin/../lib/libcudnn_ops_infer.so.8
    158834:
    158834:
    158834:     calling init: .../install/bin/../lib/libcudnn_ops_infer.so.8
    158834:
Run Code Online (Sandbox Code Playgroud)

这就是我所期待的,我很高兴。

但是,我还需要通过一些链接到它的 python 绑定来使用相同的库。为了让它工作,我需要在这种情况下设置RPATHpython 绑定(至少在我看来,它只是一个在运行时加载的共享库)。请注意,Python 可执行文件既没有RPATH也没有RUNPATH设置。这仅部分有效。也就是说,RPATH传播似乎在沿着依赖关系树向下移动时起作用,直到开始搜索 CUDA 库,此时它不再起作用。这是以相同的方式、相同的构建运行完全相同的 onnxruntime API,并在与上面相同的文件夹中使用相同的文件。唯一的区别是 python 扩展层。输出LD_DEBUG如下所示:

    159602:     find library=libonnxruntime.so.1.15.1 [0]; searching
    159602:      search path=.../install/lib/../lib …
Run Code Online (Sandbox Code Playgroud)

c++ linux rpath dlopen python-bindings

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

是否有可能在阻止并可能回调为Python的C函数之前释放GIL?

我正在包装一个执行阻塞操作(选择)的C函数,然后处理传入的消息.我的理解是,当一个C函数要阻塞时,在允许其他线程运行的同时调用它的正确方法是:

Py_BEGIN_ALLOW_THREADS                                                  
blocking_function();
Py_END_ALLOW_THREADS
Run Code Online (Sandbox Code Playgroud)

但是,它发生此函数将回调指针作为参数.在处理由C函数预处理的传入消息时调用此回调.我已经成功地将这个回调包装在一个调用的函数中PyEval_CallObject(),允许我传递一个Python回调.

现在我正在添加线程支持,我想知道是否可以同时:

  • 在调用此阻止操作之前释放GIL.
  • 让这个阻塞操作安全地回调到python解释器.

这会导致问题吗?如果是这样,有办法吗?

谢谢.

python gil python-multithreading python-bindings

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

使用Python绑定为VLC重复单个电影:什么是psz_name

我正在尝试编写一个可以反复动态播放单个电影文件的小应用程序.我用Python编写它,使用这些 VLC-Python绑定

我会说这不会那么难,即使是非常稀疏的文档,我可以在屏幕上没有任何其他内容的情况下获得电影全屏,甚至可以更改我想要播放的文件.我不能简单地让一部电影重演.

我使用以下代码:

self.media = []
Run Code Online (Sandbox Code Playgroud)

这里有一个--repeat-tag:

self.vlc_inst = vlc.Instance('--mouse-hide-timeout=0', '--fullscreen', '--repeat')
Run Code Online (Sandbox Code Playgroud)

这里有一个'--repeat'标签:
self.media = self.vlc_inst.media_new(NEW_VIDEO_NAME + str(currentVideoN)+ VIDEO_EXTENSION,' - readpe')

    self.player = self.vlc_inst.media_player_new()                  
    self.player.set_fullscreen(True)    
    self.player.set_media(self.media[currentVideoN])
    self.player.play()
Run Code Online (Sandbox Code Playgroud)

这些重复标签似乎没有做任何事情.该实例类确实有一个功能vlm_set_loop(个体经营,psz_name,b_loop),但我不知道MRL应.在原始代码中,我发现它应该是一个char数组(String),但我不知道这应该是什么类型的String.

谁有线索?

vlc python-bindings

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