Mac OS X下通过URL Scheme方式调用Python并传参
Windows下我们可以通过注册表的方式打开Python exe,并通过%1占位符的方式传递参数给Python程序,相对比Mac下要容易。今天我们不讨论Windows下如何调用Python及传递参数,打算以后再写吧,今天的重点是Mac OS X如何调用Python App并传递参数。
Mac OS X下是没有注册表的概念,通过浏览器调用Python App可以用info.plist的URL Scheme的方式调起,再用Python的Pyqt5技术实现,下面是具体实现细节:
一、Python打包App并修改info.plist
Mac OS X下Python打包我推荐Pyinstaller + spec,如果Python文件不多,就不用spec了,如果做项目Python源码很多,那就必须要写spec,相当于打包批量脚本,配置好一键打包,很方便,这个不在这里讨论,有需要的留言我可以发你。等Python打包成App之后,里面就有个info.plist,修改plist文件增加以下内容,或者用xcode增加也可以。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>testlogin1</string>
</array>
<key>CFBundleURLName</key>
<string>testlogin2</string>
</dict>
</array>
testlogin2这组可以删掉,这样我们的访问URL就是:
testlogin1://?token=3OTkzNGQ0Njc5MTRkMmI4NmU4NDM2ZmUwN
二、通过Python Pyqt5接收参数
Python Pyqt5接收参数的核心思想是QApplication的事件监听(核心),一定要监听的QApplication的事件动作,而不是应用内的某个QWidget组件。除了用Python Pyqt5实现外,用C++ QT也可以实现,这个比Python还要容易,我有写好代码,有需要的也可以留言。
核心代码:
def event(self, a0) -> bool:
if a0.type() == QEvent.FileOpen:
log_info('进入 QEvent.FileOpen方法成功-------SUCCESS')
analysis(str(a0.url()))
return super().event(a0)
当我们通过浏览器调起Python App的时候,会触发event的QEvent FileOpen事件,事件ID是116,这时接收到event中是有完整的请求URL的,格式如下:
PyQt5.QtCore.QUrl('testlogin1://?token=3OTkzNGQ0Njc5MTRkMmI4NmU4NDM2ZmUwN')
通过正则或者字符串截取就很拿到URL请求参数了,你学废了吗?
请先 后发表评论~