Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将参数传递到PyRun_文件(***)_Python_C_Python 2.7_Python 3.x - Fatal编程技术网

Python 将参数传递到PyRun_文件(***)

Python 将参数传递到PyRun_文件(***),python,c,python-2.7,python-3.x,Python,C,Python 2.7,Python 3.x,我正在用C和Python编写一些代码 我有一个名为sample.py的python文件,它接受两个字符串参数 我的C程序使用PyRun\u SimpleString()调用python函数。这样我就无法传递任何参数 通过PyRun\u SimpleString(): 如何使用PyRun\u SimpleString(*)传递参数argv[1] 使用。它的签名类似于PyRun\u文件: PyObject* PyRun_String(const char *str, int start, PyObj

我正在用C和Python编写一些代码

我有一个名为
sample.py
的python文件,它接受两个字符串参数

我的C程序使用
PyRun\u SimpleString()
调用python函数。这样我就无法传递任何参数

通过
PyRun\u SimpleString()

如何使用PyRun\u SimpleString(*)传递参数
argv[1]

使用。它的签名类似于
PyRun\u文件

PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
更新:

在您的情况下,只需将命令行参数复制到要执行的字符串中就足够简单了,就像您在问题中尝试的那样。但是,您的代码将无法工作,因为在C中不是这样连接字符串的。请尝试以下方法:

#include <Python.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv) {
    char py[1000]; /* that should be big enough */
    strcpy(py, "import sample\nsample.mainfunc(");
    strcat(py, argv[1]);
    strcat(py, ",'Isolated_domU_t')\n");

    Py_Initialize();
    PyRun_SimpleString(py);
    Py_Finalize();
}
#包括
#包括
#包括
int main(int argc,字符**argv){
char-py[1000];/*应该足够大了*/
strcpy(py,“导入样本\nsample.mainfunc(”);
strcat(py,argv[1]);
strcat(py,“,”孤立的“)\n”);
Py_初始化();
皮伦·西姆勒斯特林(py);
Py_Finalize();
}

当然,这只是快速脏版,不检查是否有参数传递给程序,也不检查其长度。

可以使用snprintf或类似的函数 然后打这个

char haies1[2048];
snprintf(haies1, sizeof(haies1),"import sample\n"
                "sample.mainfunc("%s",'Isolated_domU_t')\n",argv[1])
然后可以像这样使用PyRun_SimpleString函数

Py_Initialize();
PyRun_SimpleString(haies1);
Py_Finalize();

要设置参数,请执行以下代码:

wchar\u t**wargv=新的wchar\u t*[argc];
对于(int i=0;i
如果要调用函数,为什么要执行程序?您应该导入
sample
模块,并使用
PyObject\u call*
函数调用该函数。看起来您不知道如何在C中连接字符串。请查看以下有关该问题的SO问题:我不了解(理解)此语法,所以只有我在此处发布。我在哪里可以得到真实的示例:)语法几乎与
PyRun\u文件
相同。我以为您需要一个类似于
PyRun\u文件
的参数的方法。请看这个。在这个答案中,我将main改为addfunction(),对于这个addfunction()[main],我正在传递参数,说明我是如何实现这个目标的。简单地说,在这个答案中,我必须从命令行传递42,42个参数,看起来您想要的是获取传递给C程序的参数,并将它们传递给嵌入的python脚本。如果是这样,请相应地更新您的问题。稍后我会更新我的答案。
Py_Initialize();
PyRun_SimpleString(haies1);
Py_Finalize();