Permissão negada no dl.open () com ipython, mas não com python
Meu objetivo inicial é abrir umdll
arquivo no Cygwin usandoctypes
. No entanto, eu encontrei alguns problemas com ele. Eu desenterreisys.dl
que retorna um desconhecidoPermission denied
somente no IPython.
Compython
tudo parece bem:
$ ls
my.dll
$ python
Python 2.7.8 (default, Jul 28 2014, 01:34:03)
[GCC 4.8.3] on cygwin
>>> import dl
>>> dl.open('my.dll')
<dl.dl object at 0xfffaa0c0>
Comipython
Eu recebo o erro:
$ ipython
Python 2.7.8 (default, Jul 28 2014, 01:34:03)
In [1]: import dl
In [2]: dl.open('my.dll')
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-c681630fa713> in <module>()
----> 1 dl.open('my.dll')
error: Permission denied
Eu investiguei isso usandostrace
. O log de saída para `IPython é enorme, mais de 4 MB. Felizmente, identifiquei algumas coisas estranhas:
symlink.check(C:\Users\user\Home\projects\foo\my.dll, 0x28AB88) (0x4022)
35 2705178 [main] python2.7 16924 path_conv::check: this->path(C:\Users\user\Home\projects\foo\my.dll), has_acls(1)
37 2705215 [main] python2.7 16924 cwdstuff::get: posix /cygdrive/c/Users/user/Home/projects/foo
32 2705247 [main] python2.7 16924 cwdstuff::get: (C:\Users\user\Home\projects\foo) = cwdstuff::get (0x8006ECF0, 32768, 0, 0), errno 11
--- Process 14376, exception c0000138 at 7726163E
3286 2708533 [main] python2.7 16924 seterrno_from_win_error: /home/corinna/src/cygwin/cygwin-1.7.35/cygwin-1.7.35-1.i686/src/src/winsup/cygwin/dlfcn.cc:174 windows error 182
42 2708575 [main] python2.7 16924 geterrno_from_win_error: unknown windows error 182, setting errno to 13
36 2708611 [main] python2.7 16924 dlopen: ret 0x0
Quem é/home/corinna
? Não tenho usuário corinna na minha instalação, nem no meu Windows. Corinna não vem da minha instalação. É alguma coisa codificada?
Agora, aqui está o que eu recebostrace
parapython
:
symlink.check(C:\Users\user\Home\projects\foo\my.dll, 0x28B728) (0x4022)
26 10440048 [main] python 12604 path_conv::check: this->path(C:\Users\user\Home\projects\foo\my.dll), has_acls(1)
23 10440071 [main] python 12604 cwdstuff::get: posix /cygdrive/c/Users/user/Home/projects/foo
25 10440096 [main] python 12604 cwdstuff::get: (C:\Users\user\Home\projects\foo) = cwdstuff::get (0x8006ECF0, 32768, 0, 0), errno 0
3405 10443501 [main] python 12604 dlopen: ret 0x5B9C0000
dlopen
está retornando 0x0 no IPython enquanto está retornando 0x5B9C0000 para python. eu reparei nissocwdstuff::get
está gerando um erro antesdlopen
é chamado.
EDITAR Enviei uma mensagem para a lista de endereços de Cygwin e oresposta de Corinna em relação a esse problema é:
Isso não é culpa da Cygwin, AFAICS. Cygwin nunca carrega funções por ordinal. Isso também é um pouco fraco, no que diz respeito às informações. Não se pode ver como o processo chama dlopen, por exemplo. Corinna Como resolver este problema?
Meus testes anteriores usandoctypes
Inicialmente, quando fiz minha pergunta, eu estava apenas brincando comctypes
. Estou trabalhando no Cygwin de 32 bits e no Windows 7. Com o IPython, recebi umOSError
quando tentei carregar uma dll usandocdll.LoadLibrary
.