我目前正在开发一个使用C源文件的项目,该文件必须与python文件交互(运行文件并捕获输出),而且我不确定如何做到这一点。目前python文件使用:
通过终端(linux)运行python file arg1 arg2 arg3 arg4
我正在尝试将python嵌入到C代码中,以便首先使用以下代码运行文件(无输出捕获):
void python() {
FILE * file;
int argc;
char * argv[5];
argc=5;
argv[0]="pathtofile/file";
argv[1]="arg1";
argv[2]="arg2";
argv[3]="arg3";
argv[4]="arg4";
Py_SetProgramName(argv[0]);
Py_Initialize();
PySys_SetArgv(argc,argv);
file= fopen("pathtofile/file","r");
PyRun_SimpleFile(file,"pathtofile/file");
PyFinalize();
}
args1-2是硬编码的,args3-4由C代码确定(只是确定整数值),然后传递给python文件然后执行。
运行上面的代码时,我得到一个: TypeError:+:NoneType和'str'
的不支持的操作数类型非常感谢来自这里可能是我的问题的任何建议。
编辑: 我使用它作为指南,因为它似乎与我试图实现的类似 Run a python script with arguments
答案 0 :(得分:1)
您的 argc
未初始化 - 您是否在启用警告的情况下编译并且警告在GCC上出现错误(-Wall
,-Werror
?);并且 argv
未正确终止。因此,您的代码具有未定义的行为。可能发生任何事情,包括demons flying out of your nose。 fopen
mode
的参数必须是字符串,但您传递int
(字符常量) - 其中包含另一个UB。
因此,至少你必须做:
int argc = 5;
char *argv[] = {
"pathtofile/file",
"arg1",
"arg2",
"arg3",
"arg4",
0
};
input = fopen(..., "r"); // "r", not 'r'!
此外,您没有检查任何这些功能的返回值。他们中的任何一个都可能失败,使用Python你应该期望它们失败 - 包括你的fopen
! (请说明为简洁起见省略了它们。)