pyinstaller - 是否有等效于使用 PyObjC 的“os.listdir()”方法?
问题描述
是否有等效于使用 PyObjC 库的“os.listdir()”方法?我想列出一个目录中的所有文件。
我正在使用 PyInstaller 将我的 python 脚本制作成可执行文件。存在一个已知问题,即在 MacOS 中启动应用程序时无法使用某些“os”功能。
我在 Foundation 框架中发现了这种方法,它似乎可以工作,但我无法将其转换为正确的 PyObjC 语法(请参阅下面的错误)。
NSFileManager.defaultManager().contentsOfDirectoryAtPath_('/Users/eturner/Desktop', true)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
NSFileManager.defaultManager().contentsOfDirectoryAtPath_('/Users/eturner/Desktop', true)
AttributeError: 'NSFileManager' object has no attribute 'contentsOfDirectoryAtPath_'
解决方案
此方法的 objetive-c 选择器的名称是contentsOfDirectoryAtPath:error:
. 这意味着 Python 方法被命名contentsOfDirectoryAtPath_error_
并且应该这样使用:
contents, error = NSFileManager.defaultManager().contentsOfDirectoryAtPath_('/Users/eturner/Desktop', None)
Objective-C 选择器的“错误”参数是一个按引用传递的输出参数,这就是为什么None
传递的值和 Python 调用的返回值包含 2 个值:实际返回值和传递的值-by-reference 输出参数。