2015-08-06 4 views
3

Я работаю над скриптом Python, который входит в данный каталог и удаляет файлы на основе даты изменения. Я получил большую часть работы (удивительно!), За исключением того, что я нашел ошибку. Позвольте мне дать вам некоторое представление о том, как работает моя программа.Сценарий работает только один раз, хотя я использую «while (True)»

Таким образом, если пользователь просит, чтобы программа работала тихо, у меня есть все данные stdout и stderr, перенаправленные в временный текстовый файл в папке temp. Работает отлично. Существует также возможность запускать сценарий непрерывно. Для этого я использовал простой цикл (True). Работа непрерывно работала отлично и денди, пока я не захотел удалить эту временную папку после каждого цикла. Вот код в моей главной функции:

while(True): 

     display() 
     verifyDirectory() 
     checkArgs()    
     # Deleting the temporary folder after each loop: 
     if args.q: 
      deleteTempFolder() 

Опять же, все работало хорошо, пока я пытался удалить временную папку после каждого цикла. Программа в основном останавливается после завершения первого цикла. Вот код под deleteTempFolder():

# Closing the redirected text files. 
sys.stdout.close() 
sys.stderr.close() 

# Defining the paths for the temp folder and the existing text files. 
folder = args.directory + "\\" + "temp" 
stdoutPath = folder + "\\" + "stdout.txt" 
stderrPath = folder + "\\" + "stderr.txt" 

# Deleting the text files first, then deleting the entire temporary folder. 
os.remove(stdoutPath) 
os.remove(stderrPath) 
os.rmdir(folder) 

Я хотел бы также отметить, что все перечисленные выше код работает отлично самостоятельно, но когда я объединил два (протекал непрерывно и удалить временную папку), это когда я заметил, что я выхожу из своей петли.

Также не генерируются ошибки или исключения. Я смог проверить файл stderr, перенаправив его в другое место, поэтому он не будет удален, когда я запустил код.

Надеюсь, все это имеет смысл. Это первый случай, когда я задал вопрос здесь, и это первый скрипт, который я когда-либо писал, который не был глупой видеоигрой на Java для курса. Я надеюсь опубликовать весь скрипт позже за советом по эффективности!

+1

Вы воссоздаете папку в начале каждого цикла? В противном случае это, вероятно, не работает, потому что вы пытаетесь удалить что-то, чего не существует. – Dannnno

+1

Мое основное подозрение в том, что генерируется исключение _is_, но по какой-то причине оно не появляется в вашем перенаправленном stderr. Не могли бы вы удалить что-либо, что изменяет 'sys.stdout' или' sys.stderr', и посмотреть, что вывод находится на консоли? – Kevin

+0

Ничего себе! Вы, ребята, быстры! @Dannnno: папка становится воссозданной при вызове функции checkArgs(). Когда я не вызываю deleteTempFolder(), программа работает непрерывно и просто добавляется к одному и тому же файлу снова и снова. Если я разрешаю программе работать в течение нескольких минут, файл stdout.txt становится довольно большим. Итак, я думал, что было бы более эффективно удалять после каждого цикла. Мне интересно, должен ли я опубликовать весь скрипт здесь, но я думал, что это может быть не-нет. – LadyDee852

ответ

2

Возможно, исключение выбрано, но не отображается, поскольку поток ошибок закрыт. Попробуйте этот код (python boom.py) и закомментируйте sys.stderr.close() линии:

import sys 

print("Hello, world") 

# this will prevent displaying the exception 
sys.stderr.close() 

# NameError: name 'nosuchfunction' is not defined 
nosuchfunction 

print("Goodbye, world") 
+0

Хорошо, теперь я вижу некоторые исключения. Когда я сохраняю строку sys.stdout.close(), я получаю операцию ввода-вывода в закрытом файле. Когда я прокомментирую эту строку, я получаю «Процесс не может получить доступ к файлу, потому что он используется другим процессом». Я заметил, что эта ошибка возникает, когда я сохраняю os.remove (stdoutPath) и os.rmdir (папка). Без этих трех строк код работает отлично ... минус тот факт, что он фактически не делает то, что я хочу lol :) – LadyDee852

+1

Это было очень полезно, спасибо! Я смог увидеть исключения, и я понял свою проблему! – LadyDee852

1

я понял, решение моей проблемы, спасибо всем обратной связи здесь. Оказывается, что моя программа генерировала ошибки, но я не мог видеть, пока не закомментировал sys.stderr.close(). Как только я увидел, где и когда программа рушилась, я понял, что я никогда не воссоздавал временную папку в моей петле, что немного неловко! Спасибо всем за отзывы!

Смежные вопросы