- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Docker 内的 Alpine Linux 3.7 上运行 Twisted (Python 2.7.x)。
我现在想使用 twisted.internet.inotify
模块,但加载失败。
它在 twisted.python._inotify
中触发以下异常:
name = ctypes.util.find_library('c')
if not name:
raise ImportError("Can't find C library.")
libc = ctypes.cdll.LoadLibrary(name)
initializeModule(libc)
问题是 Alpine Linux 3.x 有一个错误,导致 ctypes.util.find_library('c')
返回 None
。
我已将代码与 inotify
module 进行了比较,我之前已经在 Alpine 中成功使用过,并且在 the following way 中处理了这个问题。 :
_FILEPATH = ctypes.util.find_library('c')
if _FILEPATH is None:
_FILEPATH = 'libc.so.6'
instance = ctypes.cdll.LoadLibrary(_FILEPATH)
所以我尝试在解释器中调用ctypes.util.find_library('libc.so.6')
,并且调用成功。
我现在想做的是猴子补丁twisted.python._inotify
,以便它加载libc.so.6
而不是c
,但我不知道如何做到这一点,因为我根本无法加载模块。
我有一个选择,那就是在docker build
期间sed
源代码,或者甚至可能在服务器启动后立即在服务器内部,但这感觉像是一种黑客攻击.
我已经看到 Twisted 包含 MonkeyPatch 模块,但我不知道如何使用它,或者它是否适合此任务。
如何以最干净的方式解决这个问题?
<小时/>注意:服务器以非 root 身份运行,因此它没有对 /usr/lib/python2.7/site-packages/twisted/python/_inotify.py
的写入权限。
这意味着我要么必须在 Dockerfile 中对其进行 sed,要么在服务器启动时在加载模块之前在内存中进行修补(如果可能的话,我更愿意这样做) .
最佳答案
除此之外,我希望您为 Twisted 贡献一个补丁,以彻底解决此问题,或者使其更容易从应用程序代码或操作级别解决。
也就是说,这是一个应该适合您的猴子补丁:
import ctypes.util
def fixed_find_library(name):
if name == "c":
result = original_find_library(name)
if result is not None:
return result
else:
return "libc.so.6"
return original_find_library(name)
original_find_library = ctypes.util.find_library
ctypes.util.find_library = fixed_find_library
# The rest of your application code...
这只需将您建议解决问题的问题的逻辑编入代码即可。只要此代码在导入 _inotify.py
之前运行,那么当它被导入时,它最终将使用“固定”版本而不是原始版本。
关于python - 扭曲的服务器: monkey-patch file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234723/
在 Powershell 中,& .\monkeys.ps1 和 & powershell .\monkeys.ps1 之间有区别吗? 最佳答案 '& .\monkeys.ps1' 在当前控制台( s
何谓猴子补丁(Monkey Patch)?在动态语言中,不修改源代码而对功能进行追加和变更。 使用猴子补丁的目的: 1、追加功能 2、功能变更 3、修正程序错误 4、增加钩子,在执行某个方法的同
我在运行monkeyrunner脚本时有时会看到以下错误。 140501 17:01:58.950:S [MainThread] [com.android.chimpchat.adb.AdbChimp
我如何运行猴子测试并排除一些包? monkey --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-secur
我知道 SO 社区有多激烈,所以我会尽力保留问题 minimal, complete and verifiable . 我只是想知道猴子补丁是否可以用来替换现有函数的定义? 例如: class A()
因此,我有一个具有此功能的 Python 应用程序,其中程序目录的 extensions 子目录中的任何类似模块的文件都会在应用程序初始化过程的早期阶段导入。 这看起来像这样(假设这是my_appli
我在调用从另一个模块导入的另一个方法的模块中有以下方法: def imported_function(): do_unnecessary_things_for_unittest() 实际需要测
我正在寻找一些例子来说明为什么在 ruby 中扩展基类不是一个好主意。我需要向一些人展示为什么它是一种需要小心使用的武器。 有什么恐怖故事可以分享吗? 最佳答案 有一个非常著名的例子 monkey
1、Monkey测试简介 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序
崩溃: java.lang.SecurityException: Injecting to another application requires **INJECT_EVENT
所以对于初学者来说,我有一个相当复杂的系统,它连接到一个 Python Web 套接字来触发一些不同的 Android 事件。我或多或少地认为这个系统在 Mac Mini 上工作。我已经将它移植到 U
Monkey Runner是否需要任何脚本语言来运行,实际上我的问题是Monkey Runner仅单击应用程序的UI,在这里我需要检查我的应用程序在哪里崩溃? 最佳答案 如果您试图找出应用崩溃的原因,
我想在 10 分钟内运行 monkey,但是 monkey 只指定了 COUNT。我尝试了 args --throttle,但它没有用。例如, adb shell monkey --throttle
我正在寻找有关“eclipse monkey”功能的一些文档。 预定义了哪些变量,这些对象有哪些方法等等... 您只能通过调整示例才能做到这一点。 最佳答案 Eclipse Monkey被列为 pro
有人可以帮助我对多个设备进行 android monkey 测试吗? ->adb shell monkey -p com.example -v 500000 所以我在我的电脑上连接了 10 台设备。我
我是 monkey runner 的新手。 是否需要源码来测试?我也只能测试 native 应用程序或第 3 方应用程序.. 如果有人能告诉我这个就好了.. 谢谢 最佳答案 虽然这个问题很老,可能已经
我有一个简单的 monkeyrunner 脚本来打开自定义应用程序,我需要在应用程序中标记特定的复选框。到目前为止,我还没有设法上下移动并使用通常的方式按下它们: MonkeyDevice.press
我正在使用以下命令来测试我的 Android 应用pb = new ProcessBuilder("adb","-s", deviceId,"shell", "monkey -p"+ packageN
当我们为android或ios应用程序安装代理时,我们通常会添加一些库并更改一些配置设置。仅添加一个库如何使该应用程序记录事件并将其推送到 monkey talk IDE。 通常我们在项目中添加库的时
是否有一个框架来模拟强加于 Qt 应用程序的确定性伪随机系列点击 - 以尝试触发任何内存泄漏、线程错误等 - 典型的猴子测试? QTestLib 有一些奇特的猴子用法? 最佳答案 是的,您可以使用有用
我是一名优秀的程序员,十分优秀!