2013-06-11 5 views
3

Я создаю файл журнал для кода, но я получаю следующее сообщение об ошибке:Почему я получаю IOError: [Errno 13] Permission denied?

 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1]  import mainLCF 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/home/ai/Desktop/home/ubuntu/LCF/GA-LCF/mainLCF.py", line 10, in 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1]  logging.basicConfig(filename='genetic.log',level=logging.DEBUG,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/logging/__init__.py", line 1528, in basicConfig 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1]  hdlr = FileHandler(filename, mode) 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/logging/__init__.py", line 901, in __init__ 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1]  StreamHandler.__init__(self, self._open()) 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] File "/usr/lib/python2.7/logging/__init__.py", line 924, in _open 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1]  stream = open(self.baseFilename, self.mode) 
[Tue Jun 11 17:22:59 2013] [error] [client 127.0.0.1] IOError: [Errno 13] Permission denied: '/genetic.log' 

Я проверил разрешение в конкретной папке, в которой я хочу, чтобы сделать журнал, но все еще получаю ошибку. Мой код: (имя mainLCF.py) структура файла

 
import logging 
import sys 


logging.basicConfig(filename='genetic.log',level=logging.DEBUG,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') 
logging.debug("starting of Genetic Algorithm") 

sys.path.append("/home/ai/Desktop/home/ubuntu/LCF/ws_code") 

import blackboard 
from pyevolve import * 
def eval_func(chromosome): 
    some function here 

моей системы является:

 
/
home 
    ai 
    Desktop 
    home 
     ubuntu 
     LCF 
     ws_code     GA-LCF 
      blackboard.py    main-LCF.py 

Я зову mainLCF.py из другой функции lcf.py, которая находится в ws_code.

+2

Вы пытаетесь написать файл '/ gene.log'', который находится в корне файловой системы, а не в любой папке, в которой вы проверяли разрешения. – geoffspear

+0

Почему это так? Должна ли она генерировать журнал в зависимости от того, какой каталог присутствует? –

+0

BTW: Я не знаю, связано ли это с сокращением кода, но вы должны пересмотреть использование импорта звезд. – b3orn

ответ

1

Необходимо изменить путь к файлу журнала, используя модуль pgingon logging.handlers. В моем случае я сделал следующие вещи:

import logging 
from logging.handlers import RotatingFileHandler 
import blackboard 

WEBAPP_CONSTANTS = { 
'LOGFILE': '/home/ai/Desktop/home/ubuntu/LCF/GA-LCF/ga.log', 
} 
def getWebAppConstants(constant): 
    return WEBAPP_CONSTANTS.get(constant, False) 

LOGFILE = getWebAppConstants('LOGFILE') 
log_handler = RotatingFileHandler(LOGFILE, maxBytes=1048576, backupCount=5) 
log_handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s ' '[in %(pathname)s:%(lineno)d]')) 
applogger = logging.getLogger("GA") 
applogger.setLevel(logging.DEBUG) 
applogger.addHandler(log_handler) 
applogger.debug("Starting of Genetic Algorithm") 

from pyevolve import * 

def eval_func(chromosome): 
    some function here 

, и она работала. Однако я до сих пор не знаю причины, по которой раньше было пытаться сделать gene.log в корневом каталоге.

+0

Он работает, потому что вы используете абсолютный путь. – b3orn

+0

Да .. Я хотел найти метод определения абсолютного пути без использования обработчиков журналов, но я не смог его найти. –

0

Похоже, что ведение журнала попыталось открыть файл журнала как /genetic.log. Если вы передадите имя файла в качестве аргумента ключевого слова в logging.basicConfig, он создает FileHandler, который передает его os.path.abspath, который расширяет имя файла до абсолютного пути на основе текущего текущего каталога. Таким образом, вы либо находитесь в корневом каталоге, либо ваш код меняет текущую рабочую директорию.

+0

Однако я не в корневом каталоге, и ни мой код не меняет абсолютный путь. Вероятно, это связано с библиотекой Pyevolve. –

+0

Есть ли у вас какие-либо идеи, как направлять файлы журналов в определенную папку? –

+0

Наверное, нет, поскольку logging.basicConfig вызывается до импорта pyevolve. Как начать mainLCF.py? – b3orn