原理和Excel中的录制宏是一样的,但是应用范围更广,功能更强悍:无论你的鼠标指向屏幕上哪个软件,哪个按钮,在键盘上输入什么数字,或者汉字,它都可以忠实地记录下来,最后形成脚本文件。...我比较喜欢使用python,常用的开发环境是mac,如果跟我使用一样的开发环境,可以继续往下看哦~ python有一个封装了 Mac OS 上的 Objective-C 的一个库,叫 pyobjc 。...安装非常简单,用pip即可, pip install pyobjc 利用pyobjc可以方便地用python开发mac的桌面app,但是操作鼠标跟键盘还要写不少代码。...这时候,再配合一个python库 PyAutoGUI,此库基于pyobjc,兼容window,使用它可以控制鼠标和键盘。利用它可以实现自动化任务,再也不用担心有重复枯燥的任务了。...第一个实现的功能比较简单,由于我的微信好友非常多,群也非常多,所以我实现的第一个功能就是让代码帮我把微信里的最新消息全部收集起来,这样我只要抽空统一看一遍,就好了。 获取的信息,效果大概如下: ?
但是,我们并没有直接使用原生的工具链,如 macOS 的 Xcode,而是将创建各个平台上的二进制文件的任务交给其他程序去做,Windows 下是 py2exe,macOS 下是 py2app,Linux...实际上,我们的代码现在由 TypeScript/HTML、Rust 和Python 混合组成,某些平台上还用了 Objective-C 和 C++。...换句话说,使用 Xcode 就很容易集成这些扩展,但 py2app 根本不支持它们。...打包通过优秀的 modulegraph(作者是 py2app 和 PyObjC 的作者 Ronald Oussoren)实现。...对 Python 解释器的选择必须在 Python 加载之前完成,因此为了使之更顺畅,我们实现了命令行参数 /py3 用于开发,和一个保存在硬盘上的永久设置,以便通过我们的功能切换系统Stormcrow
今天我们来看几种自动记录 Python 函数和方法调用日志的实现手段。 手动记录日志 这是最标准和常见的方法,在需要的时候手动记录一些信息,优点是完全可控,缺点是容易缺失一些真正重要的信息的记录。...我们可以利用 Python 的装饰器记录函数和方法调用的参数和返回值。...-- more --> 对于装饰方法调用的场景,因为 Python 类方法的第一个参数是 self,需要做一下处理。...__getattrbiture__魔法方法记录方法调用日志 使用上述装饰器可以很好的记录我们需要关注的函数和方法的调用日志,但存在一个小问题是如果我们想自动记录一个类的所有方法调用的话,就需要为每一个自定义方法上加上...总结 本文介绍了一些自动记录 Python 函数和方法调用日志的机制,这些机制在生产环境中使用并没有太大的问题,只需要配置一下日志的级别和格式(加上时间、运行时的文件和行号等)。
这个库使用 Python 对 OpenSSL 进行很薄的封装。 ---- 2 跨编程语言 Python 可以很容易地跟其它编程语言整合。...通过它,你可以很方便地调用 C/C++ 动态库导出的函数,可以在 Python 中使用各种 C/C++ 的数据类型(比如指针)。...平台 IronPython 通过 IronPython 可以让 Python 代码运行在 dotNET 平台上,并且可以调用其它的 dotNET 语言的代码(比如 C# F#) 2.4 整合 Objective-C...语言 PyObjC 这是用 Python 封装 Mac OS X 上的 Objective-C 库。...py2app 它很类似于 py2exe,差别在于 py2exe 支持 Windows 平台,而 py2app 支持 Mac OS X 平台。
python来调用这些接口,很遗憾的是,pyobjc没有封装TIS系列函数,手动使用ctypes模块来wrap一下: import ctypes import ctypes.util import objc...使用ctypes包装这个方法有两个地方可以借鉴: pyobjc 转ctypes兼容类型 pyobjc提供的对象是不能直接传递给ctypes要包装的函数使用的,需要转换成可以识别的类型。...每一个pyobjc提供的对象都有一个__c_void_p__()方法,对它调用这个方法就可以把这个对象转换成一个c_void_p类型 ctypes指针构造出pyobjc对象 简单包装一下objcruntime...(新版的pyobjc模块貌似已经包装了这个方法) PS:本人第一次包装objc接口,对于objc以及pyobjc均不熟悉,可能有更优雅的方法,请批评指正。 如何自动切换?...有两个地方需要注意: Observer对象需要先new出来,(我直接在函数参数里面调用,直接就是segement fault,不知道原因)不能使用python的构造对象方式。需要调用new方法。
一、问题背景开发者编写了一个 Python 应用程序,该应用程序能够打开不同类型文件。该应用程序在 Eclipse 中运行良好,在运行时传入要打开的文件名和配置文件作为参数。...现在,开发者使用 py2app 将其转换为应用程序。问题是,他们如何处理参数,因为不同类型文件需要通过该应用程序打开,并且该应用程序在处理时也需要配置文件。...二、解决方案创建 macOS 安装程序有几种不同的方法:1、使用 py2app:py2app 是一个用于创建 macOS 应用程序的工具,它可以将 Python 代码转换为可执行文件。...使用 py2app 创建安装程序的过程如下:开发应用程序:使用 Python 开发应用程序,并确保应用程序可以从命令行运行。创建应用程序包:使用 py2app 将应用程序打包成 .app 包。...2、使用 cx_Freeze:cx_Freeze 是一个用于创建 Windows、macOS 和 Linux 应用程序的工具,它可以将 Python 代码转换为可执行文件。
许多开发人员编写了他们自己的模块,将 Python 的功能扩展到了与 Python 打包在一起的标准模块库之外。安装第三方模块的主要方法是使用 Python 的 PIP 工具。...PIP工具 虽然 PIP 是随 Python 3.4 和更高版本自动安装在 Windows 和 MacOS 上的,但您可能需要在 Linux 上单独安装它。...Selenium 和 OpenPyXL 模块的最新版本可能会有一些与本书中使用的版本向后不兼容的变化。...另一方面,Twilio、EZGmail 和 EZSheets 模块与在线服务交互,您可能需要使用pip install --user -U命令安装这些模块的最新版本。...在 Linux 上,不需要输入一个--target参数;正常运行pip3命令即可。
2、简介 PyAutoGUI 是一个纯 Python 的 GUI 自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,macOS,Linux),并在 Python 2 和...6、鼠标函数 屏幕位置使用 X 和 Y 轴的笛卡尔坐标系。...参数可以设置,其中,button 属性可以设置成 left,middle 和 right。...mouseDown() 和 mouseUp():函数可以实现鼠标按下和鼠标松开的操作。两者参数相同,有 x,y 和 button。...这两个函数可以单独调用。 例如,按下 shift 键的同时按3次左方向键。每个按键的按下和松开也可以单独调用。
当然官方也提供了一个直接安装的方法: pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz...这里苹果用户使用的是py2app这个工具,不过需要说明的是这个工具打包后的dmg格式,只能在你电脑上运行,这个和使用pyinstaller打包的完全不一样,pyinstaller打包的软件可以在任意一台...第一步:进行安装py2app(注意使用pip3源) pip3 install py2app 第二步:查找 py2app 中 py2applet 的地址 sudo find / -name "...dist python3 setup.py py2app -A 这个过程相对来说是比较复杂的,但是也是很好理解,所以我就不一一演示了。...前面说了Windows和MacOs,那么Linux系统呢?你可以使用cx_Freeze,这个和前面的使用方法差不多,我就不一一介绍了。 好了,今天的分享就到这里了,如果你觉得不错,请分享一下吧。
在OS X 上,运行sudo pip3 install pyobjc-framework-Quartz,sudo pip3 install pyobjc-core,然后sudo pip3 install...pyobjc。... 在Linux 上,运行sudo pip3 install python3-xlib,sudo apt-get install scrot,sudo apt-get install python3-...tk,以及sudo apt-get install python3-dev(Scrot 是 PyAutoGUI 使用的屏幕快照程序)。...pyautogui pyautogui.PAUSE = 1 pyautogui.FAILSAFE = True 这里我们导入pyautogui,并将pyautogui.PAUSE 设置为1,即每次函数调用后
你使用它只是编写和编译OC源代码。 当你编译的代码包含OC中的类和方法时,编译器创建数据结构和函数调用,实现语言的动态特性。数据结构捕获类,分类和协议中声明的信息。...使用隐藏参数 当objc_msgSend找到一个方法的实现程序,它调用这个程序,传递消息中的所有参数。...它也传递给程序两个隐藏参数:接收对象和方法选择器 这些参数给了每个方法实现关于调用它的两部分消息表达的明确信息,它们被说成隐藏的是因为它们在定义方法的源代码中没有声明。...同时返回值和参数的类型也应该包含在内。 下面的例子展示实现setFilled:方法的程序可能是如何被调用的: ? setFilled 首先两个参数传递给接收对象是self方法选择器是_cmd的程序。...这些参数被隐藏在方法的语法中但是在这个方法作为一个函数调用的时候必须明确。 使用methodForSelector:规避动态绑定可以节省大多数信息传递的时间。
PyAutoGUI 简介 今天要介绍的工具就是 PyAutoGUI,看到这个名字,就能猜到它的作用,无非用 Python 自动处理图形界面的操作,的确是这样,你可以使用编程的方式来控制电脑的鼠标和键盘。...它有两个优点: 跨平台,支持 Python2 和 Python3,支持 Windows,MacOS,Linux。 易使用,接口简单不需要太多知识就可以学会,会操作鼠标和键盘就可以。...如果是 Mac 还要安装 pyobjc: pip3 install pyobjc-core pip3 install pyobjc 如果是 Linux 还需要安装下这些: sudo apt-get scrot...PyAutoGUI 对于第二台显示器的屏幕不可靠(鼠标功能可能会或可能不会在多显示器设置上工作,具体取决于您的操作系统和版本)。...https://github.com/asweigart/nicewin[2] 上的 nicewin 模块演示了如何通过 Python 进行 Windows API 调用。
要将Python脚本文件打包成可以使用的Python软件,可以借助的工具有py2exe、bbFreeze、pyInstaller、cx_Freeze、py2app,但对于目前使用性能最好的工具还是pyinstaller...在安装好pyinstaller模块之后,就可以对Python文件进行打包了,其中导Python模块的方法可以是将文件放在与pip相同的文件夹下,或者在使用命令时,将文件的绝对路径放在打包命令中。...以下是在使用pyinstaller进行打包时必备的步骤和注意事项,仔细参考,谨防踩坑: (1) pyinstaller适用于python3.5及以下版本 (2) 在python环境的Script下使用cmd...命令进行打包, (3) 对于不需要调用其他外部库的py文件, ① 单独使用命令pyinstaller 命令 文件.py (4) 对于需要调用外部库的py文件 ① 使用pyi-makespec -F 文件....py生成spec文件 ② 对spec文件中的参数进行修改 ③ spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT.
二、实现 2.1 实现方法 最通用且方便的是,借助第三方库将对应 Python 脚本以及环境统一打包、封装。 这里强推 Pyinstaller ,在 Win 和 Mac 下都有很好的表现。...打包 Python 脚本的常用第三方库: Win 环境: Pyinstaller / Py2exe Mac 环境:Pyinstaller / Py2app (踩过巨坑,亲测不算好用) Pyinstaller...安装方法: pip install pyinstalle Pyinstaller 的应用及参数说明:官方文档 2.2 具体内容 恰逢圣诞节,就用「绘制圣诞树」的脚本来举个栗子吧: 圣诞树代码详见:链接...原因:由于 Pyinstaller 默认将当前整个 Python 环境 和 脚本内容封装进去的,因此在 Python 环境中第三方库越多,打包后的可执行文件越大; 解决方案:创建虚拟环境,进入(activate...Python 脚本中调用外部文件的变量实现,实际运用时修改外部文件的内容即可; 更优雅的方法:用 Gui 开发工具实现,如简易便捷的 pysimplegui。
前文介绍了在使用lambda表达式时,如果代码体只有一行代码可以省略花括号,如果有返回值也可以省略return关键词,不仅如此,lambda表达式在只有一条代码时还可以引用其他方法或构造器并自动调用,可以省略参数传递...第二个sort方法则直接引用了对象的实例方法,语法规则为类::实例方法,系统会自动将函数式接口实现的方法的所有参数中的第一个参数作为调用者,接下来的参数依次传入引用的方法中即自动进行s1.compareTo...accept(T t);,因此可以使用lambda表达式进行调用,这里引用System.out的类方法println,引用语法类::类方法,系统会自动将实现的函数式接口方法中的所有参数都传入该类方法并进行自动调用...接口Index和Generator都是函数式接口,因此可以使用lambda表达式。...对于getIndex方法需要传入一个实现Index接口的对象和一个子串,在调用时首先定义了一个字符串Hello World,然后引用了这个对象的实例方法indexOf,这个时候系统会自动将这个特定对象作为调用者然后将所有的参数因此传入该实力方法
我们首先还是使用pip进行安装: pipinstallPyInstaller 安装完成后,直接打开命令行,输入pyinstaller,如果显示如下界面,说明安装成功。 ?...内容扩展: 如何将编写好的python程序生成可执行的.exe或者APP?...首先确认安装好pyinstaller和py2app,安装方法: pipinstall pyinstaller pip install py2app cmd进入Windows窗口的命令行,cd进入project...文件名中可以输入一下指令指定输出配置功能如下: -F 指定打包后只生成一个exe格式的文件 -D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项) -c –console, –nowindowed 使用控制台...,无界面(默认) -w –windowed, –noconsole 使用窗口,无控制台 -p 添加搜索路径,让其找到对应的库。
二、使用JavaScript代码向Objective-C中修改或添加方法 JSPatch引擎中支持3中方式进行JavaScript代码的调用,分别是使用JavaScript字符串进行代码运行...,直接在使用的时候对其进行引用: require('UIView').alloc().init() 2.在JavaScript文件中进行Objective-C方法的调用 在进行Objective-C...调用类方法:通过类名打点的方式来调用类方法,格式类似如下,括号内为参数传递: UIColor.redColor() 调用实例方法:通过对象打点的方式调用类的实例方法,格式如下,括号内为参数传递: view.addSubview...(label) 对于Objective-C中的多参数方法,转化为JavaScript将参数分割的位置以_进行分割,参数全部放入后面的括号中,以逗号分割,示例如下: view.setBackgroundColor...重写或者添加类的方法: 在JavaScript中使用defineClass来定义和修改类中的方法,其编写格式如下所示: /* classDeclaration:要添加或者重写方法的类名 字符串 如果此类不存在
启动方式 unittest的启动方式有两种 python -m unittest xxx.xxx unittest.main() 第一种方式是以命令行的方式,也是我们正常执行用例和调试的时候使用的命令。...第二种方式是代码中编排执行测试用例的时候常用的方法。 命令行方式 使用命令行方式,首先得了解,这个-m 参数的作用。 官方文档说明了这个参数是按照模块化的方式执行。...使用-m的方式执行之后,python会把当前路径加到sys.path中。 无法这样执行内建模块 一点一点来分析。 第一点 -m执行对象是一个包,而不是一个.py文件。...import main, TestProgram, USAGE_AS_MAIN TestProgram.USAGE = USAGE_AS_MAIN main(module=None) 从这类可以看出来,调用.../Python.framework/Versions/2.7/Extras/lib/python/PyObjC'] 其中的第一个"" 就是命令所在的目录。
这个页面提供了许多科学开源扩展包的32位和64位Windows二进制文件,用于Python编程语言的官方CPython发行版。...提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。...JPype 提供的 startJVM() 函数的作用是启动 JAVA 虚拟机,所以在后续的任何 JAVA 代码被调用前,必须先调用此方法启动 JAVA 虚拟机。...cx_Freeze 是一组脚本和模块用来将 Python 脚本封装成可执行程序,类似 py2exe 和 py2app 。...不同的是,cx_Freeze 是跨平台的,要求 Python 2.3 或更新版本。 Kivy是一个开源工具包能够让使用相同源代码创建的程序能跨平台运行。
MessageMock通过任意[target selector]调用命中目标方法: 修改目标方法返回值、参数 验证目标方法返回值、参数 跳过目标方法调用 获取目标方法命中次数 核心原理 借助 fishhook...拿到切面过后,就可以拦截到所有的 Objective-C 方法调用,具备了做任何“坏事”的条件。...但值得注意的是,MessageMock 代码必经路径不能包含任何的 Objective-C 方法调用,不然会死循环,所以源码大部分是使用 C++ / Assembly 实现的。...修改和检查参数 目前只考虑小于等于指针类型的参数,大致测试了一下方法调用仅使用寄存器的情况: 通用寄存器参数最多 6 个(x2 - x7) 浮点寄存器参数最多 8 个(d0 - d7 编译器限制不能连续超过...考虑到接口和实现的简洁,还是希望能做一个真正的泛型接口,最好是能支持编译器的索引,能想到的有两点:C 多参和宏。
领取专属 10元无门槛券
手把手带您无忧上云