【问题标题】:Open explorer on a file在文件上打开资源管理器
【发布时间】:2008-11-11 19:24:56
【问题描述】:

在 Python 中,如何在 Windows 资源管理器中跳转到文件?我找到了跳转到文件夹的解决方案:

import subprocess
subprocess.Popen('explorer "C:\path\of\folder"')

但我没有文件的解决方案。

【问题讨论】:

    标签: python windows explorer


    【解决方案1】:

    来自Geoff Chappell's The Windows Explorer Command Line

    import subprocess
    subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
    

    【讨论】:

    • 我知道这是一个超级老帖子,但值得一试。我有一个将共享点文档库连接到 Windows 资源管理器窗口的模块,以便本地过去的副本将上传到共享点文档库。这有时需要刷新,我正在使用 selenium 重新连接,但现在我有一个打开的 Windows 资源管理器窗口。我不知道如何关闭该窗口,以便应用程序 GUI 再次成为最终用户的焦点。知道如何选择该窗口并关闭它吗?
    • 出于某种奇怪的原因,在我的 Windows 10 系统上,这只是打开了以“我的文档”为焦点的资源管理器用户库。
    • 我遇到了与@MisterGeeky 相同的问题,它只是打开了“我的文档”。我很确定它与反斜杠有关......
    • 我忘记在/selectpath 之间添加comma (,),然后My Documents 被打开。即explorer /select,"C:\path\of\folder\file" 是正确的不是这个explorer /select "C:\path\of\folder\file"
    • 如果您在文件路径中使用正斜杠,则执行 filepath.replace('/', '\\') 使其类似于 C:\path\of\folder\file跨度>
    【解决方案2】:

    一个更好、更安全的解决方案(不幸的是仅在 Windows 中)是os.startfile()

    当它被赋予一个文件夹而不是一个文件时,它将打开资源管理器。

    我知道我没有完全回答这个问题,因为它没有选择文件,但使用 subprocess 总是一个坏主意(出于安全原因),这个解决方案可能对其他人有所帮助。

    【讨论】:

    • 是的,当然,我知道不安全感,但我很安全 :) 谢谢你的小费,这对我也有帮助(是的,多年来)
    • 不是很跨操作系统,startfile 只存在于 Windows (stackoverflow.com/questions/29823028/…) 上。
    • 另一个无赖:os.startfile() 不接受参数 ☹ 尽管在 Explorer 的情况下,通过subprocess.runPopen 分离进程似乎很容易
    • 这个函数拒绝像./some/folder这样的路径。您可以先使用os.path.abspath("./some/folder") 转换路径。
    • “使用子进程总是一个坏主意”......什么?不,不是。
    【解决方案3】:

    由于explorer 可以被覆盖,直接指向可执行文件会更安全一些。 (也必须是schooled on this

    当您使用它时:使用 Python 3s 当前子进程 API:run()

    import os
    import subprocess
    FILEBROWSER_PATH = os.path.join(os.getenv('WINDIR'), 'explorer.exe')
    
    def explore(path):
        # explorer would choke on forward slashes
        path = os.path.normpath(path)
    
        if os.path.isdir(path):
            subprocess.run([FILEBROWSER_PATH, path])
        elif os.path.isfile(path):
            subprocess.run([FILEBROWSER_PATH, '/select,', path])
    

    【讨论】:

    • 这不适用于 Windows 10。它会打开我的电脑
    • @Patt:我刚试过r'C:\path\file.exe'C:\\path\\file.exeC:/path/file.exe,它们都有效。您只需要确保您的路径格式正确并且os.path.isfile 可以使用它。
    • @Spencer:不,没关系。这就是path = os.path.normpath(path) 的用途:)
    • @ewerybody 是的,错过了...删除了我的评论。
    【解决方案4】:

    由于某种原因,在 Windows 7 上它总是打开用户路径,对我来说,以下是:

    import subprocess
    subprocess.call("explorer C:\\temp\\yourpath", shell=True)
    

    【讨论】:

    • subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"') 有效,但是如果用户在其程序中的某处执行此语句后转到其他窗口,我如何让这个窗口位于其他窗口之上?
    • 这应该会自动弹出在前面
    • 尽量避免使用shell=True tho! security.openstack.org/guidelines/…
    • 只要你知道你在哪里使用并且在一个封闭的环境中就可以了
    【解决方案5】:

    或者,您可以使用EasyGUI 的fileopenbox 模块打开文件资源管理器供用户单击,然后选择一个文件(返回完整的文件路径)。

    import easygui
    file = easygui.fileopenbox()
    

    【讨论】:

      【解决方案6】:

      对于任何想知道如何使用变量代替直接文件路径的人。下面的代码将打开资源管理器并突出显示指定的文件。

      import subprocess
      subprocess.Popen(f'explorer /select,{variableHere}')
      

      下面的代码只会在资源管理器中打开指定的文件夹,而不突出显示任何特定的文件。

      import subprocess
      subprocess.Popen(f'explorer "{variableHere}"')
      

      我只在 windows 上测试过

      【讨论】:

      • 在 python 3 中,这应该是一个原始格式字符串,即subprocess.Popen(fr'explorer "{variableHere}"')
      【解决方案7】:

      在资源管理器中打开文件夹的代码:

      import os
      import ctypes
      SW_SHOWDEFAULT = 10
      path_to_open = os.getenv('windir')
      ctypes.windll.shell32.ShellExecuteW(0, "open", path_to_open, 0, 0, SW_SHOWDEFAULT)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多