我目前正在使用C源文件的项目中进行工作,该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
最佳答案
您的argc
尚未初始化-您是否在启用警告的情况下进行编译并将警告制成错误(在GCC上为-Wall
,-Werror
?);并且您的argv
不能正确以null终止。因此,您的代码具有未定义的行为。可能发生任何事情,包括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
! (为简洁起见,请告诉我们省略它们)。关于python - 使用嵌入在C中的python的参数运行文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36734595/