2016-09-19 2 views
0

Ich habe Probleme mit einem meiner Skripte, wo es scheinbar Probleme beim Schreiben in sein eigenes Protokoll hat, die Fehlermeldung "Diese Datei wird von einem anderen Prozess verwendet."Welcher Prozess verwendet eine bestimmte Datei?

Ich weiß, es gibt Möglichkeiten, dies zu umgehen mit versuchen, Ausnahmen, aber ich würde gerne herausfinden, warum dies geschieht eher als nur tapezieren über es. Nichts anderes sollte auf diese Datei zugreifen. Um die Ursache des Fehlers zu ermitteln, möchte ich herausfinden, welcher Dienst diese Datei verwendet.

Gibt es eine Möglichkeit in Python unter Windows zu überprüfen, welcher Prozess eine bestimmte Datei verwendet?

+1

Schauen Sie sich das Modul 'psutil' an. – acw1668

+0

@ acw1668 Ich habe es mir angeschaut, aber es scheint kein Werkzeug zu haben, um eine Datei zu finden, die von einem anderen Prozess geöffnet wurde. – SuperBiasedMan

+0

Probieren Sie 'psutil.Process (pid) .open_files()' aus, wobei 'pid' von' psutil.pids() 'abgerufen werden kann. Sie können auch alle Prozesse mit 'psutil.process_iter()' durchlaufen. – acw1668

Antwort

1

Sie können das Befehlszeilenprogramm handle.exe von Microsoft verwenden. Zum Beispiel:

import re 
import subprocess 

_handle_pat = re.compile(r'(.*?)\s+pid:\s+(\d+).*[0-9a-fA-F]+:\s+(.*)') 

def open_files(name): 
    """return a list of (process_name, pid, filename) tuples for 
     open files matching the given name.""" 
    lines = subprocess.check_output('handle.exe "%s"' % name).splitlines() 
    results = (_handle_pat.match(line.decode('mbcs')) for line in lines) 
    return [m.groups() for m in results if m] 

Beachten Sie, dass dies Einschränkungen in Bezug auf Unicode-Dateinamen hat. Im Python 2-Subprozess wird name als ANSI-Zeichenfolge übergeben, da CreateProcessA anstelle von CreateProcessW aufgerufen wird. In Python 3 wird der Name als Unicode übergeben. In beiden Fällen schreibt handle.exe seine Ausgabe mit einer verlustreichen ANSI-Codierung, sodass der übereinstimmende Dateiname im Ergebnistupel die am besten passenden Zeichen und "?" Ersatz.

Verwandte Themen