[英]Permission to append to a log denied error on Mac but not on Windows
我正在尝试将应用程序移植到Mac,但是我不明白是什么原因导致了此问题。
在某些时候,我尝试使用ctypes的LoadLibrary
加载由第三方提供的几个C ++库。 对于Windows,我有dll;对于Mac,我有dylib。 加载dylib也会产生一个错误,我也正在尝试解决,但这在这里不应该成为问题,因为我确实有一个try / except块。
try:
self.log('Lib exists? %s: %s' % (libpath, os.path.exists(libpath)))
origdir = os.getcwd()
os.chdir(os.path.dirname(libpath))
self.lib = cdll.LoadLibrary(os.path.basename(libpath))
os.chdir(origdir)
self.log("Loaded Library!")
except Exception as e:
self.log('Error importing Library! %s' % e)
self.lib_loaded = False
任何问题都将写入日志文件。 问题是,它附加到日志文件中,该文件以某种方式可用于第一次调用,但在上述片段中的第二次调用时不起作用,位于
self.log('Error importing Library! %s' % e)
。
log方法非常明显:
def log(self, text):
if self.debug:
print text
with open('logfile.log', 'a') as w:
w.write('%s\n' % text)
在Windows上,这可以正常工作。 找到该库后,它将加载,而当找不到该库时,我会得到适当的消息,并将其写入日志。 但是在Mac上,我得到了错误
Lib exists? /usr/local/lib/path/to/Mylib: True
Error importing Library! dlopen(lib.dylib, 6): no suitable image found. Did find:
lib.dylib: mach-o, but wrong architecture
/usr/local/lib/lib.dylib: mach-o, but wrong architecture
Traceback (most recent call last):
File "myapp.py", line 987, in <module>
foo = Foo(pyqtapp, splash)
File "myapp.py", line 83, in __init__
self.thelibLink = libLink.libLink(0.05, a, b)
File "libLink.py", line 100, in __init__
self.log('Error importing Library! %s' % e)
File "libLink.py", line 326, in log
with open(self.logfile, 'a') as w:
IOError: [Errno 13] Permission denied: 'logfile.log'
logfile.log
具有-rw-r--r--
权限,并且是我所有的,因此这对我来说没有任何意义。 此外,在运行程序之后,日志文件包含以下内容:
==Log of date/time==
Lib exists? /usr/local/lib/path/to/Mylib: True
因此,以某种方式,我确实有权在首次调用self.log
时追加到文件。 有什么想法可以解决这个问题吗?
您正在使用相对路径打开日志文件,但是在失败之前更改目录:
os.chdir(os.path.dirname(libpath))
相反,请使用绝对路径打开日志文件,因为您显然无法写入os.path.dirname(libpath)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.