繁体   English   中英

在Mac上允许追加到日志被拒绝的错误,但在Windows上则不允许

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM