Как пропустить удаление файла после получения ошибки? - PullRequest
0 голосов
/ 12 апреля 2020

Мне нужно сделать процесс, который удаляет все файлы во временной папке, когда я запускаю программу, которая говорит: «Процесс не может получить доступ к файлу, потому что он используется другим процессом.», Поэтому я попытался заставить его пропустить файл, если он сказал, что это не работает. Я также очень плохо знаком с python. Вот мой код:

    if event in ('Delete Temp'):
        while ("temp"):
            os.system('cmd /c "del /q/f/s %TEMP%\*"')

         if print('The process cannnot access the file because it is being used by another process.')
            pass

Ответы [ 4 ]

0 голосов
/ 12 апреля 2020

Вы захотите попробовать / исключить утверждение. и вложите его в a для l oop.

Ваш код будет выглядеть следующим образом:

import os

for root, dirs, files in os.walk(dir):
  for file in files:
    path = os.path.join(dir, file)
    try:
        os.remove(path)
    except:
        pass

вы используете функцию ходьбы из библиотеки os для go через каждый из файлов в «реж». «dir» - это каталог, из которого вы хотите удалить. Затем вы просматриваете каждый файл oop и пытаетесь удалить его.

Если вы «попробуете», и это не удастся, файл пропустится.

0 голосов
/ 12 апреля 2020

Ошибка показывается вам, так как у вас есть процесс, который использует его (может быть интерфейс командной строки или прямой доступ к вам)

Однако я считаю, что проще всего "пропустить" файлы, используемые другой процесс с блоком try, за исключением.

блок try / Кроме того, вы сможете обрабатывать исключений, создаваемых встроенными командами python, которые вы используете (например, для удаления файла).

Что более важно, это не нарушит sh вашу программу во время выполнения, если вы обрабатываете только что-то с печатью:

try:
  #Run your deletion commands here
except:
  #Your code will run this block if there is an exception when your try to delete
  print('Something went wrong with that file you tried to delete.')
0 голосов
/ 12 апреля 2020

Ваш while ("temp"): должен быть эквивалентен while True l oop, поскольку он никогда не остановится.

Вы можете использовать pathlib для достижения sh вашей цели Например, (удалив содержимое в /tmp)

from pathlib import Path

for child in Path("/tmp").iterdir():
    if child.is_file():
        try:
            child.unlink()
        except Exception as Err:
            print(f"Error occured: {Err}")
0 голосов
/ 12 апреля 2020

Вы можете заключить команду удаления в блок try/except и вместо os использовать модуль subprocess, чтобы выдать исключение в случае сбоя:

from subprocess import run
while condition:
    try:
        run('cmd /c "del /q/f/s %TEMP%\*"', shell=True, check=True)
    except CalledProcessError as ex:
        print(f"Failed to delete files. stdout: {ex.stdout}, stderr: {ex.stderr}, returncode: {ex.returncode}")

Но вы должны изменить себя в то время как условие, у вас есть бесконечный l oop там - (while "temp" будет всегда True)

...