【问题标题】:Is there an equivalent to the "os.listdir()" method using PyObjC?是否有等效于使用 PyObjC 的“os.listdir()”方法?
【发布时间】:2021-02-08 01:03:03
【问题描述】:

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

我正在使用 PyInstaller 将我的 python 脚本制作成可执行文件。有一个known issue 在 MacOS 中启动应用程序时无法使用某些“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_'

【问题讨论】:

    标签: pyinstaller pyobjc


    【解决方案1】:

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

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

    Objective-C 选择器的“error”参数是一个按引用传递的输出参数,这就是为什么 None 被传递为该值并且 Python 调用的返回值包含 2 个值:实际返回值以及传递引用输出参数的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-12
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2012-05-27
      相关资源
      最近更新 更多