首页 > 解决方案 > 是否有等效于使用 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_'

标签: pyinstallerpyobjc

解决方案


此方法的 objetive-c 选择器的名称是contentsOfDirectoryAtPath:error:. 这意味着 Python 方法被命名contentsOfDirectoryAtPath_error_并且应该这样使用:

contents, error = NSFileManager.defaultManager().contentsOfDirectoryAtPath_('/Users/eturner/Desktop', None)

Objective-C 选择器的“错误”参数是一个按引用传递的输出参数,这就是为什么None传递的值和 Python 调用的返回值包含 2 个值:实际返回值和传递的值-by-reference 输出参数。


推荐阅读