Python 将参数传递到PyRun_文件(***)
我正在用C和Python编写一些代码 我有一个名为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
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();