Öffnen Sie den Explorer für eine Datei

74

Wie springe ich in Python zu einer Datei im Windows Explorer? Ich habe eine Lösung gefunden, um zu Ordnern zu springen:

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

aber ich habe keine lösung für dateien.

Kirill Titov
quelle

Antworten:

89

Über Geoff Chappells Windows Explorer-Befehlszeile

import subprocess
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')
Blair Conrad
quelle
Ich bin mir bewusst, dass dies ein super alter Beitrag ist, aber es ist einen Versuch wert. Ich habe ein Modul, das eine Sharepoint-Dokumentbibliothek mit einem Windows Explorer-Fenster verbindet, sodass eine lokal abgelegte Kopie in die Sharepoint-Dokumentbibliothek hochgeladen wird. Dies muss gelegentlich aktualisiert werden und ich verwende Selen, um die Verbindung wiederherzustellen, aber jetzt habe ich ein geöffnetes Windows Explorer-Fenster. Ich habe keine Ahnung, wie ich dieses Fenster schließen soll, damit die Anwendungs-GUI wieder zum Fokus des Endbenutzers wird. Haben Sie eine Idee, wie Sie dieses Fenster auswählen und schließen können?
Benjooster
19
Aus irgendeinem Grund öffnet dies auf meinem Windows 10-System nur die Explorer-Benutzerbibliotheken mit dem Fokus "Eigene Dateien".
MisterGeeky
1
Ich habe das gleiche Problem wie @MisterGeeky, es öffnet nur "Eigene Dateien". Ich bin mir ziemlich sicher, dass es etwas mit den Backslashes zu tun hat ...
Birgersp
1
Ich habe vergessen das comma (,)dazwischen hinzuzufügen /selectund pathdann My Documentswird das geöffnet. dh explorer /select,"C:\path\of\folder\file"ist nicht richtigexplorer /select "C:\path\of\folder\file"
Phani Rithvij
1
Wenn Sie Schrägstriche im Dateipfad verwenden, führen Sie einen Dateipfad.replace ('/', '\\') aus, sodass er wie C: \ Pfad \ von \ Ordner \ Datei
aussieht
17

Eine schönere und sicherere Lösung (leider nur unter Windows) ist os.startfile () .

Wenn anstelle einer Datei ein Ordner angegeben wird, wird der Explorer geöffnet.

Ich bin mir bewusst, dass ich die Frage nicht vollständig beantworte, da es keine Datei auswählt, aber die Verwendung subprocessist immer eine schlechte Idee und diese Lösung kann anderen Menschen helfen.

Guillaume Lebreton
quelle
Ja, sicher, ich habe die Idee der Unsicherheit, aber ich war sehr sicher :) Danke für Ihren Tipp, das hat mir auch geholfen (ja, im Laufe der Jahre)
Kirill Titov
1
Nicht sehr betriebssystemübergreifend , startfileexistiert nur unter Windows ( stackoverflow.com/questions/29823028/… ).
cz
Ein weiterer Mist: os.startfile()akzeptiert keine Argumente ☹ Obwohl es im Falle des Explorers einfach zu sein scheint, den Prozess über subprocess.runorPopen
ewerybody am
9

Da explorerdies überschrieben werden könnte, wäre es etwas sicherer, direkt auf die ausführbare Datei zu verweisen. (musste nur auch darauf geschult werden)

Und wenn Sie schon dabei sind: Verwenden Sie die aktuelle Unterprozess-API von Python 3: 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])
ewerybody
quelle
8

Aus irgendeinem Grund öffnet es unter Windows 7 immer den Benutzerpfad, für mich hat folgendes ausgearbeitet:

import subprocess
subprocess.call("explorer C:\\temp\\yourpath", shell=True)
user1767754
quelle
subprocess.Popen(r'explorer /select,"C:\path\of\folder\file"')funktioniert, aber wie bekomme ich dieses Fenster über andere Fenster, wenn der Benutzer zu einem anderen Fenster wechselt, nachdem er diese Anweisung irgendwo in seinem Programm ausgeführt hat?
Nancy
Dies sollte automatisch an der Vorderseite erscheinen
user1767754
Vermeiden Sie die Verwendung von shell=Truetho! security.openstack.org/guidelines/…
ewerybody
Solange Sie wissen, wo Sie verwenden und es sich in einer geschlossenen Umgebung befindet, ist das in Ordnung
user1767754
8

Alternativ können Sie das Datei- Openbox-Modul von EasyGUI verwenden , um den Datei-Explorer zu öffnen, durch den der Benutzer klicken und dann eine Datei auswählen kann (wobei der vollständige Dateipfad zurückgegeben wird).

import easygui
file = easygui.fileopenbox()
MacNutter
quelle