Psutil: proc.open_files() schränkt die Ergebnisse unter Windows ein

Erstellt am 25. Apr. 2017  ·  10Kommentare  ·  Quelle: giampaolo/psutil

proc.open_files() scheint nur Dateien auf meinem Laufwerk C: zurückzugeben, aber keine Dateien auf anderen Laufwerken. Ich habe dies herausgefunden, indem ich über jeden laufenden Prozess iteriert, open_files aufgerufen und die Ergebnisse mit dem verglichen habe, was bei der Ausführung des Handle-Programms unter https://technet.microsoft.com/en-us/sysinternals/handle.aspx ausgespuckt wird

Ich habe keine weiteren Details außer den zurückgegebenen open_files, die immer nur auf meinem Laufwerk C: existieren und keine anderen verfügbaren Laufwerke.

Wenn Sie weitere Details benötigen, lassen Sie es mich wissen.

bug windows

Alle 10 Kommentare

open_files unter Windows ist im Grunde genommen unzuverlässig und historisch gesehen eine Nervensäge, siehe die rote Warnung hier:
https://pythonhosted.org/psutil/#psutil.Process.open_files
...und:
https://github.com/giampaolo/psutil/pull/597
Ich bin nicht überrascht, dass dies ein weiteres Problem ist, das mir nicht bewusst war.
Realistischerweise denke ich, dass ich dem Dokument nur eine weitere Warnung hinzufügen werde, aber ich werde keine Zeit investieren, um das Problem zu beheben, da ich es für eine verlorene Sache halte.

CC @mrjefftang

Schade, dass es so weh tut. Es ist eine großartige Funktion, wenn Windows dumme Dinge tut und Dateihandles für Dinge offen hält, die es nicht auch brauchen sollte.

Wenn ich irgendwann etwas Zeit habe, kann ich mir vielleicht diesen speziellen Fehler ansehen.

Vielen Dank für Ihre Mühe bei diesem Projekt!

Auf welcher Windows-Version fährst du?

Windows 10

Der einfache Test, den ich verwendet habe, besteht darin, einen Ordner in einem anderen Laufwerk als C: mit dem Explorer zu öffnen. Der Pfad zu diesem Ordner sollte in den geöffneten Dateihandles für explorer.exe angezeigt werden.

Seltsamerweise sollten Datei-Handles nicht fehlen, es sei denn, es handelt sich um Netzlaufwerke.

Die Realität ist, dass open_files zusammengehackt wurde, damit es funktioniert. Es gibt eine geeignete Lösung mit Windows-APIs, die in 7+ verfügbar sind und die Unterstützung für frühere Versionen fallen lassen.

Jeff, was ist damit? Wenn Sie sich sicher sind, bin ich dafür, den derzeit vorhandenen Hack fallen zu lassen und nur Win 7 zu unterstützen.

Ich erinnere mich nicht an die genauen API-Aufrufe zu dieser Zeit, aber ich erinnere mich, dass es nur unter Windows 7+ funktionierte, als ich es getestet habe. Und zu diesem Zeitpunkt musste ich WinXP für ein Projekt unterstützen, das auf psutil beruhte. Ich könnte es in einer der vorherigen PRs/Ausgaben dokumentiert haben.

Ich habe keine Zeit, daran zu arbeiten, aber ich glaube, es wäre einfach, wenn jemand dies mit den richtigen APIs implementiert.

Hallo, ich fange an, mich mit dieser Angelegenheit zu befassen, da ich Öffnungs-/Schließungsereignisse in Windows genau beobachten möchte, aber ich bin mit der Windows-API nicht vertraut. Ist es möglich, dass die von @mrjefftang erwähnte API TDH ist? Eine Antwort auf StackOverflow bezeichnet es als etwas, das in Vista/7 eingeführt wurde.

Rückblickend darauf, weil ich open_files() Code unter Windows neu schreibe: Es scheint, dass psutil Dateien auflisten kann, die auf anderen Laufwerken als C:\ leben. Ich habe gerade eine Datei auf einem anderen Laufwerk (E:) erstellt und sie wird angezeigt. Das Dokument erwähnt diese Einschränkung, aber es scheint, dass sie entweder falsch oder veraltet ist. Schließe das ab.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen