- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个可以接受争论的 Python 扩展。这是我的脚本:
#include <Python.h>
static PyObject * _message(PyObject *self, PyObject *args) {
char *title, *message;
if (!PyArg_ParseTuple(args, &title, &message))
return NULL; // Throw an error
return Py_BuildValue("");
}
static PyMethodDef methods[] = {
{"Message", (PyCFunction) _message, METH_VARARGS, "Message(title, message) Take a message"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef functions = {
PyModuleDef_HEAD_INIT,
"test",
"Take a message",
"-1",
methods
};
PyMODINIT_FUNC PyInit_test(void) {
PyObject *module = PyModule_Create(&functions);
return module;
}
安装.py:
from setuptools import setup, Extension
module = Extension (
"test",
sources = ['test.c'])
setup(
name = "test",
version = "1.0",
description = "Take message input",
author = "Simon",
ext_modules = [module])
但是,当我尝试编译它时,出现错误:
C:\Users\Simon\Desktop\PyTest>python setup.py build
running build
running build_ext
building 'test' extension
C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\Users\Simon\AppData\Local\Programs\Python\Python36-32\include -IC:\Users\Simon\AppData\Local\Programs\Python\Python36-32\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Tools\MSVC\14.14.26428\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17134.0\cppwinrt" /Tctest.c /Fobuild\temp.win32-3.6\Release\test.obj
test.c
test.c(2): warning C4067: unexpected tokens following preprocessor directive - expected a newline
test.c(10): warning C4047: 'function': 'const char *' differs in levels of indirection from 'char **'
test.c(10): warning C4024: 'PyArg_ParseTuple': different types for formal and actual parameter 2
test.c(23): warning C4047: 'initializing': 'Py_ssize_t' differs in levels of indirection from 'char [3]'
test.c(42): warning C4047: 'function': 'const char *' differs in levels of indirection from 'int'
test.c(42): warning C4024: 'PyModule_AddStringConstant': different types for formal and actual parameter 3
C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\link.exe /nologo /INCREMENTAL:NO /LTCG /nodefaultlib:libucrt.lib ucrt.lib /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:C:\Users\Simon\AppData\Local\Programs\Python\Python36-32\libs /LIBPATH:C:\Users\Simon\AppData\Local\Programs\Python\Python36-32\PCbuild\win32 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Tools\MSVC\14.14.26428\lib\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\ucrt\x86" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17134.0\um\x86" test.lib /EXPORT:PyInit_test build\temp.win32-3.6\Release\test.obj /OUT:build\lib.win32-3.6\test.cp36-win32.pyd /IMPLIB:build\temp.win32-3.6\Release\test.cp36-win32.lib
Creating library build\temp.win32-3.6\Release\test.cp36-win32.lib and object build\temp.win32-3.6\Release\iup.cp36-win32.exp
Generating code
Finished generating code
我很确定我的代码的其余部分是正确的,除了在以下位置获取参数:
static PyObject * _message(PyObject *self, PyObject *args) {
char *title, *message;
if (!PyArg_ParseTuple(args, &title, &message))
扩展已创建,但是当我尝试运行它时,它崩溃了。
如何获取位置参数?
最佳答案
您需要在第二个参数中指定参数类型。例如:
if (!PyArg_ParseTuple(args,"zz", &title, &message))
其中 z
表示 C 风格的零分隔字符串,"zz"
表示有两个字符串。这些被称为说明符,其中有很多,以下是一些最常见的:
i/I Signed/unsigned int
d/D Signed/unsigned double
s C-style string (char *)
z C-style string or None
y bytes object
O Generic Python object (oh)
O! Typed Python object (oh!)
此外,函数
中的“-1”
应该是-1
。
关于python - 接受争论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50991334/
我有这样一个受歧视的工会: type A = |B | C of int*A 我必须像这样进行模式匹配(括号似乎是必需的): match x with | B -> printfn "B" | C (
panic!(arg) 发出后如何收集 arg? This文档不明确。 当执行 panic!(42) 时,我希望我的应用程序收集 42 并优雅地失败,而不仅仅是中止。 最佳答案 为了收集论点,向下转换
所以,我已经使用 HP 媒体中心一段时间了,只有大约 4 GB 的 RAM,所以,当然,我运行的是 32 位 Windows 7。我一直尝试运行一个使用java虚拟机,我可以使用jvm争论它,但是,我
我有以下 IDL 接口(interface): interface ItemA : Item { void actionA(in float a, out long b); }; 在
hamcrest库中有一个方法: package org.hamcrest.core ... public static Matcher allOf(Matcher first, Matcher s
我有一个格式为 numpy.timedelta(64) 的时间增量:value = numpy.timedelta64(30,'m') (此处为 30 分钟)。 有没有办法将该值传递给 pandas
我是一名优秀的程序员,十分优秀!