2012-10-27 22 views
0

我試圖將我的應用程序移植到Mac,但我不明白是什麼導致了這個問題。在Mac上追加日誌拒絕錯誤的權限,但不是在Windows上

在某些情況下,我嘗試使用ctypes'LoadLibrary加載第三方提供的幾個C++庫。對於Windows,我有dll,對於Mac,dylib。加載dylibs給出了一個錯誤,我也試圖解決,但這不應該成爲一個問題,因爲我確實有一個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)寫:

回答

3

您使用相對路徑打開日誌文件,但你只是在失敗之前更改目錄。

+0

當然!在我切換回原始目錄之前發生庫加載錯誤。我沒有意識到這一點,但它絕對解釋。謝謝! :) – Junuxx

相關問題