Иногда «Ошибка прав доступа» возвращается при запуске программы, которая создает много файлов - PullRequest
0 голосов
/ 06 декабря 2018

В настоящее время у меня есть следующий код:

# Open a place holding output file
    with open('out.txt', 'w') as f:

        # Run BOLSIG-
        r = Popen("%s %s" % (bolsig, infile), stdout=f, cwd=outputdir)
        # Wait for BOLSIG- to complete
        Popen.wait(r)

# Remove the created output file as it is not used and BOLSIG- creates it's own file
    remove('out.txt')

Он принимает файл .exe (bolsig) , запускает свою программу и вводит в запущенную программу имя файла (infile) , который программа затем открывает и выполняет соответственно, выводя свой собственный файл.Этот скрипт часто запускается с 1000 входными файлами.

Единственный способ заставить Попена разрешить bolsig сохранить свой выходной файл - создать «удерживающий» файл out.txt и удалить его позже.Часто это работает нормально, но иногда программа запускает вывод файлов 80/90/100, а затем неожиданно запускает строку,

with open('out.txt', 'w') as f:

выдаст следующую ошибку:

Traceback (most recent call last):
File "C:/Users/minec/Desktop/College/4th_Year/Final Year Project/Program/Master-Program.py", line 1129, in <module>
   main()
File "C:/Users/minec/Desktop/College/4th_Year/Final Year Project/Program/Master-Program.py", line 45, in main
   outputdir = bolsig_minus(runfilelist)
File "C:/Users/minec/Desktop/College/4th_Year/Final Year Project/Program/Master-Program.py", line 496, in bolsig_minus
   with open('out.txt', 'w') as f:
PermissionError: [Errno 13] Permission denied: 'out.txt'

Кто-нибудь знаетпочему выкидывает эту ошибку только изредка?Если да, то как мне это исправить или изменить код, чтобы он вообще не использовал файл out.txt , но все же позволял бы Popen сохранять его файл?

1 Ответ

0 голосов
/ 06 декабря 2018

Кажется, что время от времени вы пытаетесь записать в out.txt, прежде чем он будет полностью удален.Что вы можете сделать:

  1. Добавьте немного time.sleep() в перед запуском нового скрипта
  2. Проверьте, не существует ли out.txt перед запуском Popen
  3. Используйте эту библиотеку для обработки временных файлов: https://docs.python.org/2/library/tempfile.html

Я думаю, что лучшим подходом будет номер 3 в сочетании с номером 2.

...