小编d33*_*tah的帖子

Python ctypes:如何修改现有的char*数组

我正在研究一个使用libupnp的Python应用程序,它是一个C库.我正在使用CTypes来使用这个很容易的库.我遇到的问题是我正在为读取请求注册回调函数.该函数具有以下形式的原型:

int read_callback(void *pFileHandle, char *pBuf, long nBufLength);
Run Code Online (Sandbox Code Playgroud)

pFileHandle只是一些文件句柄类型.pBuf是一个可写的内存缓冲区.这是输出数据的地方.nBufLength是从文件中读取的字节数.返回状态代码.

我有一个Python函数指针.这很容易实现,但是当我定义一个Python函数来处理这个回调时,我发现pBuf没有写入,因为Python字符串是不可变的,当你分配或修改它们时,它们会创建新的实例.这带来了一个很大的问题,因为当函数完成所请求的文件数据时,C库需要返回char指针.由于Python字符串的方式,每次缓冲区最终都是空的.如果没有修改C库,有没有办法解决这个问题?

处理程序应该修改给出的缓冲区参数,这是我的问题.

所以我想要发生的是调用Python函数来执行某些文件的读取(可能在内存中,文件系统句柄或其间的任何内容).pBuf参数由读取流填充(再次在Python中).然后回调返回到写入pBuf的C代码.

python ctypes pointers function-pointers

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

每次保存时自动运行 mypy 和 pylint?

我想通了如何运行pylint节省VSCode我的文件的时候,但我不喜欢的事实,我被迫做出抉择pylintmypy时,我想两者。有没有办法可以强制 VSCode 结合来自pylint和类型检查器的警告?

visual-studio-code vscode-settings

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

我可以在存储库克隆后向自己添加一个可见的注释吗?

我刚刚意识到我忘了在我刚刚检查过的存储库中添加一个推钩,并且经历了一些令人不快的后果.我注意到我不能git add .git/hooks/pre-push.我可以以某种方式向我自己添加一条消息,一旦我克隆存储库就会显示该消息,这会提醒我添加预推脚本吗?

git

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

赋值中的类型不兼容(表达式的类型为“List[<nothing>]”,变量的类型为 (...)

考虑以下独立示例:

from typing import List, Union

T_BENCODED_LIST = Union[List[bytes], List[List[bytes]]]
ret: T_BENCODED_LIST = []
Run Code Online (Sandbox Code Playgroud)

当我用 mypy 测试它时,出现以下错误:

from typing import List, Union

T_BENCODED_LIST = Union[List[bytes], List[List[bytes]]]
ret: T_BENCODED_LIST = []
Run Code Online (Sandbox Code Playgroud)

这里有什么问题以及如何正确注释这个示例?

python mypy

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

如何使用LD_PRELOAD包装ioctl(int d,unsigned long request,...)?

这是我用于使用LD_PRELOAD包装函数的模板:

int gettimeofday(struct timeval *tv, struct timezone *tz) {
  static int (*gettimeofday_real)(struct timeval *tv, struct timezone *tz)=NULL;
  if (!gettimeofday_real) gettimeofday_real=dlsym(RTLD_NEXT,"gettimeofday");
  return gettimeofday_real(tv, tz);
}
Run Code Online (Sandbox Code Playgroud)

我意识到ioctl似乎有以下签名:

   int ioctl(int d, unsigned long request, ...);
Run Code Online (Sandbox Code Playgroud)

考虑...到签名中的内容,我怎么能以类似的方式包装呢?

c linux system-calls ld-preload

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

如何处理大量的JSON词典?

我有一个包含JSON字典流的文件,如下所示:

{"menu": "a"}{"c": []}{"d": [3, 2]}{"e": "}"}
Run Code Online (Sandbox Code Playgroud)

它还包括嵌套字典,看起来我不能依赖换行符作为分隔符.我需要一个可以像这样使用的解析器:

for d in getobjects(f):
  handle_dict(d)
Run Code Online (Sandbox Code Playgroud)

关键是如果迭代仅发生在根级别,那将是完美的.是否有一个Python解析器可以处理所有JSON的怪癖?我感兴趣的是一个可以处理不适合RAM的文件的解决方案.

python json

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

更改代码文件之一时自动重新加载 Django 的规则是什么?

我注意到./manage.py runserver当我的views.py文件被更改时会自动重新加载。驱动它的底层代码如何工作?

python django

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

`test:first job:script应该是一个字符串或一个字符串数组

我想创建一个简单的"hello,world"Gitlab CI脚本.我已经让Docker转轮工作,我正在尝试这样的事情:

image: debian:sid

test:first:
  script:
  - true
Run Code Online (Sandbox Code Playgroud)

不幸的是,构建失败并出现错误: test:first job: script should be a string or an array of a strings

我究竟做错了什么?

gitlab gitlab-ci gitlab-ci-runner

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

logger应该是参数还是全局变量?

在阅读Python代码时,我通常会看到以下两种约定之一:

def something(logger):
  logger.info('doing something')
Run Code Online (Sandbox Code Playgroud)

要么:

LOGGER = logging.getLogger(__NAME__)
def something():
  LOGGER.info('doing something')
Run Code Online (Sandbox Code Playgroud)

前者有什么优势,即线程安全,而另一种则没有?还是纯粹是风格上的差异?

python logging conventions

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

如何添加所需查询参数的文档?

我正在尝试创建一个依赖于 HTTP GET 参数的 fastapi API 端点,将它们记录下来并使用 fastapi 的验证功能。考虑以下最小示例:

import fastapi

app = fastapi.FastAPI(
)

@app.get("/endpoint")
def example_endpoint(
    par1: int = fastapi.Query(
        None,
        description="example documentation1",
    ),

    par2: int = fastapi.Query(
        None,
        description="example documentation2",
    ),
):
    return {"test": par1 + par2}
Run Code Online (Sandbox Code Playgroud)

这具有文档支持并可通过 HTTP GET 参数工作,但不会验证它们 - http://localhost:8000/endpoint?par1=2&par2=3 工作正常,但 http://localhost:8000/endpoint 崩溃并显示内部服务器错误,而不是通知用户需要一个参数。有没有办法使 par1 和 par2 成为必需并保留文档功能?

python fastapi

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