在Python中,如何跳转到Windows资源管理器中的文件?我找到了一个跳转到文件夹的解决方案:
import subprocess
subprocess.Popen('explorer "C:\path\of\folder"')
但是我对文件没有解决方案。
来自Geoff Chappell的 Windows Explorer命令行
import subprocess
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
更好、更安全的解决方案(仅适用于 Windows)是使用 os.startfile()。
如果给出的是一个文件夹而不是一个文件,它将打开资源管理器。
我知道我没有完全回答问题,因为它没有选择文件,但对于安全原因,使用 subprocess
总是种不好的想法,这个解决方案可能会帮助其他人。
startfile
只存在于 Windows 上(https://dev59.com/HIrda4cB1Zd3GeqPHQ0U)。 - c zos.startfile()
不接受参数☹
虽然在资源管理器的情况下,通过subprocess.run
或Popen
轻松分离进程。 - ewerybody./some/folder
这样的路径。您可以使用 os.path.abspath("./some/folder")
先转换路径。 - tshcmd=r'explorer /select,"C:\path\of\folder\file"'; subprocess.Popen(cmd)
如果字符串 cmd 被恶意用户攻击,它可以例如创建一个新文件(在 Windows 上的示例):'cmd /c type NUL > 1.txt'
。有更多的想象力可以做很多邪恶的事情,这就是为什么我认为玩弄 subprocess 不是一个好主意。 - Guillaume Lebreton由于explorer
可以被覆盖,因此直接指向可执行文件会更安全。(我也需要受到教育)
在此同时:请使用Python 3的当前子进程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
可以在其上工作。 - ewerybodypath = os.path.normpath(path)
的作用 :) - ewerybody由于某些原因,在Windows 7上它总是打开用户路径,对我来说以下方法可行:
import subprocess
subprocess.call("explorer C:\\temp\\yourpath", shell=True)
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
可以正常工作,但是如果用户在程序的某个地方执行了这个语句后去到其他窗口,如何让这个窗口显示在其他窗口之上呢? - Nancyshell=True
选项!
https://security.openstack.org/guidelines/dg_use-subprocess-securely.html - ewerybody或者,您可以使用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}"')
。 - Spencer打开资源管理器的代码:
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)
import os
path = "C:\path\of\folder"
os.startfile(path)
import os
os.system('notepad filename')
例子1. 如果我在同一目录下有一个文件no.txt
os.system('notepad no.txt')
示例2。如果我想在其他目录中打开文件
os.system('notepad "C:\\Users\\DELL\\Downloads\\a.txt"')
import subprocess
subprocess.Popen(r'explorer /open,"C:\path\of\folder\file"')
我发现使用 explorer /open 命令可以列出目录中的文件。当我使用了 /select 命令(如上所示),explorer 打开了父目录并将我的目录标记为高亮。
/select
和路径之间添加逗号(,),然后打开了“我的文档”。即explorer /select,“C:\path\of\folder\file”
是正确的,而不是explorer /select "C:\path\of\folder\file"
。 - Phani Rithvijsubprocess.Popen(fr'explorer /select,"{my_var}"')
。 - Ola Karlsson