【问题标题】:How to find the directory of the .app that a python script is running from如何找到运行 python 脚本的 .app 目录
【发布时间】:2017-01-15 03:15:12
【问题描述】:

我最近制作了一个 python 脚本,它可以遍历它所在目录中的文件,并根据某些条件重命名它们。该脚本运行良好,我使用 py2app 将脚本编译为 OS X .app。这也很好。但是现在当我运行脚本时,它会搜索“.app/contents/macOS”文件夹(脚本所在的位置)中的文件,而不是“.app”实际所在的位置。

这是因为它的开头有这段代码:

src = os.path.dirname(os.path.abspath(__file__))

将“.py”文件的位置分配给一个变量,然后在整个脚本中广泛使用。有什么办法可以改为添加一个 sn-p 代码来告诉 python 执行“.py”文件的“.app”的路径位置?

如果没有,也许有一种方法可以打开文件资源管理器窗口,用户可以从那里选择一个文件夹,然后将其路径分配给“src”变量。我对 python 很陌生,所以这肯定是一个挑战。

【问题讨论】:

    标签: python macos python-3.x py2app


    【解决方案1】:

    尝试使用:

    import os
    print(os.getcwd())
    

    来自文档:

    getcwd()

    返回一个代表当前工作目录的 unicode 字符串。

    【讨论】:

    • @thanks 非常感谢您的回复,不幸的是这不起作用并且出现了同样的问题,我想我将不得不使用 tkinter 来提示用户选择一个目录。完成后将添加代码
    • @Ruthus99 当然。
    【解决方案2】:

    要找到包装应用程序的.app 目录的位置,最直接的方法是使用当前代码修改找到的路径。在像你一样计算src之后,像这样修剪它并使用app作为路径:

    import re
    ...
    app, rest = re.split(r"/[^/]*\.app/", src, 1)
    

    这在以.app 结尾的第一个路径组件处停止。如果您愿意,您可以硬编码您的应用程序名称,例如/myprogram.app/.

    PS。我很困惑为什么您将应用程序复制到要修改的文件夹中。文件选择对话框或拖放是告诉程序要处理什么的更常见(也更容易)的方法。使用py2app 创建的 OS X 应用程序支持拖放:您的程序可以像这样获取拖放目录的路径:

    import sys
    folders = sys.argv[1:]   # Handles multiple arguments
    for folder in folders:
        do_something_in(folder)
    

    然后只需将要处理的一个或多个目录拖放到应用程序图标上即可,并且不需要它知道它的来源在哪里。

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 2014-09-06
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2011-06-23
      • 1970-01-01
      相关资源
      最近更新 更多