gpt4 book ai didi

python - 使用 ipython 对 dl.open() 的权限被拒绝,但不使用 python

转载 作者:太空狗 更新时间:2023-10-29 17:31:07 24 4
gpt4 key购买 nike

我最初的目标是使用 ctypes 在 Cygwin 上打开一个 dll 文件。但是我发现了一些问题。我挖掘了 sys.dl,它仅在 IPython 上返回未知的 Permission denied

使用 python 一切看起来都很好:

$ 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>

使用 ipython 我得到错误:

$ 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

我使用 strace 对此进行了调查。 `IPython 的输出日志很大,超过 4MB。幸运的是,我发现了一些奇怪的东西:

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

/home/corinna 是谁?我的安装中没有 corinna 用户,Windows 上也没有。 Corinna 并非来 self 的装置。它是一些硬编码的东西吗?

现在,这是我从 strace 获得的用于 python 的内容:

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 在 IPython 中返回 0x0,而在 python 中返回 0x5B9C0000。我注意到 cwdstuff::get 在调用 dlopen 之前引发错误。

编辑我向 Cygwin 的邮件列表和 answer of Corinna 发送了一条消息关于这个问题是:

This is not Cygwin's fault, AFAICS. Cygwin never loads functions by ordinal. This is also a bit on the lean side as far as information is concerned. One can't see how the process calls dlopen, for instance. Corinna How to solve this issue?

我之前使用 ctypes 进行的测试

最初,当我问我的问题时,我只是在玩 ctypes。我正在使用 Cygwin 32 位和 Windows 7。在 IPython 中,当我尝试使用 cdll.LoadLibrary 加载 dll 时,我得到了一个 OSError

最佳答案

两个想法:

1) 在下一个单元格中,键入 %pdb,然后交互式地“打印 self._name”以查看它是什么。

2) 使用 cdll.LoadLibrary("foo.dll") 的完整路径查看是否有效。

一旦你知道问题是什么,你就可以确定它是谁的错误,并报告它(可能是 ctypes 问题,但可能是 ipython)

关于python - 使用 ipython 对 dl.open() 的权限被拒绝,但不使用 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29097551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com