我試圖將我的應用程序移植到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)
寫:
當然!在我切換回原始目錄之前發生庫加載錯誤。我沒有意識到這一點,但它絕對解釋。謝謝! :) – Junuxx