Python 为什么我得到IOError:[Errno 13]权限被拒绝?

Python 为什么我得到IOError:[Errno 13]权限被拒绝?,python,python-2.7,permissions,permission-denied,ioerror,Python,Python 2.7,Permissions,Permission Denied,Ioerror,我正在为代码创建日志文件,但出现以下错误: [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]

我正在为代码创建日志文件,但出现以下错误:

[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' [2013年6月11日星期二17:22:59][error][client 127.0.0.1]导入主LCF [Tue Jun 11 17:22:59 2013][error][client 127.0.0.1]文件“/home/ai/Desktop/home/ubuntu/LCF/GA-LCF/mainLCF.py”,第10行,在 [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') [2013年6月11日星期二17:22:59][error][client 127.0.0.1]文件“/usr/lib/python2.7/logging/_init___;.py”,第1528行,在basicConfig中 [Tue Jun 11 17:22:59 2013][error][client 127.0.0.1]hdlr=FileHandler(文件名,模式) [Tue Jun 11 17:22:59 2013][error][client 127.0.0.1]文件“/usr/lib/python2.7/logging/_init__.py”,第901行,在_init中__ [Tue Jun 11 17:22:59 2013][error][client 127.0.0.1]StreamHandler.\uuuu init\uuuuu(self,self.\u open()) [2013年6月11日星期二17:22:59][error][client 127.0.0.1]文件“/usr/lib/python2.7/logging/_init__.py”,第924行,处于打开状态 [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]权限被拒绝:'/genetic.log' 我已检查了要在其中创建日志的特定文件夹中的权限,但仍然收到错误。 我的代码是:(名字是mainLCF.py)

导入日志记录 导入系统 logging.basicConfig(filename='genetic.log',level=logging.DEBUG,格式='%(asctime)s%(message)s',datefmt='%m/%d/%Y%I:%m:%s%p') 调试(“启动遗传算法”) sys.path.append(“/home/ai/Desktop/home/ubuntu/LCF/ws\u code”) 输入黑板 从pyevolve导入* def eval_func(染色体): 这里有些功能 我的系统的文件结构是:

/ home ai Desktop home ubuntu LCF ws_code GA-LCF blackboard.py main-LCF.py / 家 人工智能 桌面 家 ubuntu LCF ws_代码GA-LCF blackboard.py main-LCF.py
我正在从ws_代码中的另一个函数lcf.py调用mainLCF.py。

看起来日志记录试图以
/genetic.log
的形式打开日志文件。如果将filename作为关键字参数传递给
logging.basicConfig
,它将创建一个
FileHandler
,并将其传递给
os.path.abspath
,该文件将根据当前工作目录将文件名扩展为绝对路径。因此,您要么在根目录中,要么代码更改了当前的工作目录。

您需要使用logging.handlers python模块更改日志文件路径。 就我而言,我做了以下工作:

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

它成功了。但是我仍然不知道为什么它之前尝试在根目录下创建genetic.log。

虽然您的代码似乎正确,但我认为最好指定一个绝对路径。如果您在本地计算机上开发,并且应用程序在另一台服务器上运行,则可能存在一些差异,例如,谁调用该进程
建议将日志写入您试图写入的
'/genetic.log'
文件系统根目录下的
/var/log/app_name

,而不是您检查权限的任何文件夹。为什么这样做?它不应该在代码所在的目录中生成日志吗?顺便说一句:我不知道这是否是由于您的代码缩短所致,但您应该重新考虑使用星型导入。但是我不在根目录中,我的代码也不会更改绝对路径。可能是因为Pyevolve库。您知道如何将日志文件定向到特定文件夹吗?可能不是,因为在导入Pyevolve之前会调用logging.basicConfig。如何启动mainLCF.py?如何从另一个文件调用它?我的调用方式如下:import sys;sys.append(“mainLCF.py文件的路径名”);进口主要LCF;现在我从另一个文件调用mainLCF.py的主函数。是的。。我想找到不使用日志处理程序而定义绝对路径的方法,但找不到。
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