【发布时间】:2008-11-11 19:24:56
【问题描述】:
在 Python 中,如何在 Windows 资源管理器中跳转到文件?我找到了跳转到文件夹的解决方案:
import subprocess
subprocess.Popen('explorer "C:\path\of\folder"')
但我没有文件的解决方案。
【问题讨论】:
在 Python 中,如何在 Windows 资源管理器中跳转到文件?我找到了跳转到文件夹的解决方案:
import subprocess
subprocess.Popen('explorer "C:\path\of\folder"')
但我没有文件的解决方案。
【问题讨论】:
来自Geoff Chappell's The Windows Explorer Command Line
import subprocess
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
【讨论】:
/select 和path 之间添加comma (,),然后My Documents 被打开。即explorer /select,"C:\path\of\folder\file" 是正确的不是这个explorer /select "C:\path\of\folder\file"
一个更好、更安全的解决方案(不幸的是仅在 Windows 中)是os.startfile()。
当它被赋予一个文件夹而不是一个文件时,它将打开资源管理器。
我知道我没有完全回答这个问题,因为它没有选择文件,但使用 subprocess 总是一个坏主意(出于安全原因),这个解决方案可能对其他人有所帮助。
【讨论】:
startfile 只存在于 Windows (stackoverflow.com/questions/29823028/…) 上。
os.startfile() 不接受参数 ☹ 尽管在 Explorer 的情况下,通过subprocess.run 或Popen 分离进程似乎很容易
./some/folder这样的路径。您可以先使用os.path.abspath("./some/folder") 转换路径。
由于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])
【讨论】:
r'C:\path\file.exe'、C:\\path\\file.exe 和C:/path/file.exe,它们都有效。您只需要确保您的路径格式正确并且os.path.isfile 可以使用它。
path = os.path.normpath(path) 的用途:)
由于某种原因,在 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/…
或者,您可以使用EasyGUI 的fileopenbox 模块打开文件资源管理器供用户单击,然后选择一个文件(返回完整的文件路径)。
import easygui
file = easygui.fileopenbox()
【讨论】:
对于任何想知道如何使用变量代替直接文件路径的人。下面的代码将打开资源管理器并突出显示指定的文件。
import subprocess
subprocess.Popen(f'explorer /select,{variableHere}')
下面的代码只会在资源管理器中打开指定的文件夹,而不突出显示任何特定的文件。
import subprocess
subprocess.Popen(f'explorer "{variableHere}"')
我只在 windows 上测试过
【讨论】:
subprocess.Popen(fr'explorer "{variableHere}"')
在资源管理器中打开文件夹的代码:
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)
【讨论】: