小编xea*_*its的帖子

使用ctypes从dll列出导出的函数

有没有办法知道从dllpython外部函数库导出哪些函数ctypes

如果可能的话,通过c了解有关导出函数的详细信息types.

如果是,有人可以提供一小段代码吗?

python dll ctypes shared-libraries

35
推荐指数
5
解决办法
3万
查看次数

python - os.getenv和os.environ看不到我的bash shell的环境变量

我在ubuntu 13.04,bash,python2.7.4

解释器没有看到我设置的变量.

这是一个例子:

$ echo $A
5
$ python -c 'import os; print os.getenv( "A" )'
None
$ python -c 'import os; print os.environ[ "A" ]'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
    raise KeyError(key)
KeyError: 'A'
Run Code Online (Sandbox Code Playgroud)

但是PATH变量的一切正常:

$ echo $PATH 
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Run Code Online (Sandbox Code Playgroud)

它注意到PATH:

$ PATH="/home/alex/tests/:$PATH"
$ echo $PATH 
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games …
Run Code Online (Sandbox Code Playgroud)

python bash environment-variables pythonpath

33
推荐指数
2
解决办法
5万
查看次数

导入包时会发生什么?

为了效率,我试图弄清楚python如何与其对象堆(以及命名空间系统,但它或多或少清晰)一起工作.所以,基本上,我试图理解何时将对象加载到堆中,有多少对象,它们存在多长时间等等.

我的问题是当我使用包并从中导入一些东西时:

from pypackage import pymodule
Run Code Online (Sandbox Code Playgroud)

什么对象被加载到内存中(进入python解释器的对象堆)?更一般地说:会发生什么?:)

我猜上面的例子做了类似的事情:包的一些对象pypackage是在内存中创建的(其中包含有关包的一些信息但不是太多),模块pymodule被加载到内存中,并且它的引用是在本地名称空间中创建的.这里重要的是:没有其他模块pypackage(或其他对象)在内存中创建,除非明确说明(在模块本身,或包初始化技巧和钩子中的某个地方,我不熟悉) .最后,内存中唯一的一件大事就是pymodule(即导入模块时创建的所有对象).是这样吗?如果有人澄清此事,我将不胜感激.也许你可以建议一些有用的文章吗?(文档涵盖更具体的内容)

我发现以下有关模块导入的相同问题:

当Python导入模块时,它首先检查模块注册表(sys.modules)以查看模块是否已导入.如果是这种情况,Python会按现有模块对象使用.

否则,Python会做这样的事情:

  • 创建一个新的空模块对象(这本质上是一个字典)
  • 将该模块对象插入sys.modules字典中
  • 加载模块代码对象(如有必要,首先编译模块)
  • 在新模块的命名空间中执行模块代码对象.代码分配的所有变量都可以通过模块对象获得.

并且会对包裹的相同解释感激不尽.

顺便说一句,对于包,模块名称被添加到sys.modules奇怪的:

>>> import sys
>>> from pypacket import pymodule
>>> "pymodule" in sys.modules.keys()
False
>>> "pypacket" in sys.modules.keys()
True
Run Code Online (Sandbox Code Playgroud)

同样存在关于同一问题的实际问题.

当我构建一组可能用于不同进程和程序的工具时.我把它们放在模块中.我别无选择只能加载一个完整的模块,即使我只想要使用一个在那里声明的函数.正如我所看到的那样,通过制作小模块并将它们放入包中可以减轻这个问题(如果一个包在你只导入其中一个模块时没有加载它的所有模块).

有没有更好的方法在Python中创建这样的库?(仅使用单个函数,它们的模块中没有任何依赖项.)是否可以使用C扩展?

PS抱歉这么长的问题.

python memory-management heap-memory

18
推荐指数
1
解决办法
3097
查看次数

julia,线性代数,是否有函数找到与给定的一个正交的所有向量?

对于给定的矢量,我想找到它周围的正交基,即给定的矢量归一化和随机选择的正交子空间的基础.朱莉娅有这个方便的功能吗?

linear-algebra julia

10
推荐指数
2
解决办法
1663
查看次数

R中不可见的功能/方法 - 它们是如何制作的?

如何定义用户不可见的函数(方法)?那些你打电话时带星号的那些methods().

它似乎在互联网上有关于它们的一切,但如何定义它们?

我可以只定义一个不可见的函数(通过在其名称中添加一些东西),或者我应该以某种方式调整环境,还是R包的特定功能来隐藏东西?

methods hidden r function

8
推荐指数
1
解决办法
1234
查看次数

python argparse 不显示正确的帮助消息

我有一个使用 python 脚本argparse。在命令行中输入后python script_name.py -h,它会显示另一个命令的帮助消息,但代码仍然有效。该脚本可以识别其中定义的选项并运行良好。看起来脚本是被什么东西封装的。我输入argparse了一个函数,一开始一切都运行良好。我只是不知道是什么原因导致帮助消息发生变化。

这是代码:

#!/usr/bin/env python

import os
import sys
import json
import logging
import argparse
import handlers


HZZ_DIR = os.path.dirname(os.path.abspath(__file__))
ROOT_DIR = os.path.dirname(os.path.dirname(HZZ_DIR))
logger = logging.getLogger('hzz_logger')
logger.setLevel(logging.DEBUG)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
logger.addHandler(console)


def parse_args():
    arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument('job', choices=['ws','lm','np'],
            help="ws: workspace; lm: limit; np: npranking")
    arg_parser.add_argument('-a', '--action', nargs=1,
            help="for Limit and NPranking: get/plot (limit/pull)")
    arg_parser.add_argument('-b', '--blinded', action='store_true',
            help="for Limit: true -- do expected only, false -- do observed as well.")
    arg_parser.add_argument('-v', …
Run Code Online (Sandbox Code Playgroud)

python overriding argparse pyroot

6
推荐指数
1
解决办法
1762
查看次数

ELF,Build-ID,是否有一个实用程序来重新计算它?

我在ELF二进制文件中看到了这个有用的功能 - Build ID."它......(通常)是ELF图像中所有代码部分的SHA1哈希值." 可以用GNU实用程序读取它:

$ readelf -n /bin/bash
...
Displaying notes found at file offset 0x00000274 with length 0x00000024:
  Owner                 Data size   Description
  GNU                  0x00000014   NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: 54967822da027467f21e65a1eac7576dec7dd821
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种简单的方法可以自己重新计算Build ID?检查它是否没有损坏等

linux linker elf

4
推荐指数
1
解决办法
4191
查看次数

julia,为什么函数内部的循环会发生内存分配?

在内存分配报告中julia --track-allocation=user,最大分配是在这个函数中:

        - function fuzzy_dot_square( v::Array{Int64, 1} )
        -     dot_prod = zero(Int64)
7063056168     for i::Int64 in 2:28
        0         dot_prod += v[i]*(v[i] + v[i-1] + v[i+1] + v[i+28])# / 4 # no "top" pixel
        -     end
        0     for i in 29:(28*27) # compiler should literate 28*27
        0         dot_prod += v[i]*(v[i] + v[i-1] + v[i+1] + v[i-28] + v[i+28])# / 5 # all pixels
        -     end
        0     for i in (28*27):(28*28 - 1)
        0         dot_prod += v[i]*(v[i] + v[i-1] + …
Run Code Online (Sandbox Code Playgroud)

performance memory-management julia

3
推荐指数
1
解决办法
296
查看次数

哪个是在评估中通过小修正来扩展Lisp的最简单方法?

我想尝试扩展一些Lisp(Scheme,Racket,Clojure,any)来运行外部命令,如下所示:

; having
(define foo ...)
(define bar ...)
; on command
(ls (foo bar) baz)
; this lisp should evaluate (foo bar) as usual, with result "foobar", then
(ls foobar baz)
; here "ls" is not defined
; instead of rising "undefined identifier" exception
; it must look for "ls" command in the directories
; in the "PATH" environment variable
; and launch the first found "ls" command
; with strings "foobar" and "baz" on input
Run Code Online (Sandbox Code Playgroud)

我只想运行它,无需从lisp的数据结构到字符串或处理退出代码和命令输出的正确转换stdout/stderr. …

lisp dsl eval common-lisp racket

3
推荐指数
2
解决办法
73
查看次数

clojure:如何列出当前命名空间中可到达的所有名称?

根据文档 dir列出的只有"公共"变量.实际上,它并没有显示出来,并且可能在当前命名空间中不可用:

user=> (dir user)
nil
user=> 
user=> 
user=> (in-ns 'foo)
#<Namespace foo>
foo=> 
foo=> 
foo=> (dir foo)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: dir in this context, compiling:(NO_SOURCE_PATH:17)
Run Code Online (Sandbox Code Playgroud)

还存在哪些其他(非公开)类型的名称/变量?(这些可能是Java类型?)如何列出这些非公开名称?它们如何在启动时导入命名空间(或某些"默认情况"命名空间)?如何在运行时搜索默认名称空间?

例如,在Python中:dir()列出当前命名空间中的所有内容,如果未找到引用的变量,则在其中进行检查dir(__builtins__).

namespaces clojure

1
推荐指数
1
解决办法
348
查看次数