是否有等效于使用 PyObjC 的“os.listdir()”方法?

问题描述

是否有等效于使用 PyObjC 库的“os.listdir()”方法?我想列出目录中的所有文件

我正在使用 PyInstaller 将我的 Python 脚本制作成可执行文件。在 MacOS 中启动应用程序时,有一个 known issue 部分“os”功能无法使用。

我在 Foundation 框架中发现 this method 似乎可以工作,但我无法将其转换为正确的 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 个值:实际的返回值和传递引用输出参数的值。