gpt4 book ai didi

python - 运行应该接受来自 C 程序的参数的 python 脚本

转载 作者:行者123 更新时间:2023-11-30 14:59:05 26 4
gpt4 key购买 nike

如何从 C 程序中指定 python 脚本的参数,在 C 程序内调用 python 脚本时必须传递此参数

这个C代码能够成功运行python脚本,但是我如何传递python脚本可以接受的参数?

    #include <stdio.h>
#include <string.h>
#include <python2.7/Python.h>
#include <getopt.h>

int main (int argc, char * argv[])
{
char command[50] = "python2.7 /alok/analyze.py";
system(command);return(0);
}

最佳答案

从推荐中,我看到你真正的问题是,如何从 2 个给定的字符串中创建一个字符串。

您可以做的是:编写一个函数,将 2 个字符串连接成一个。为此,您需要获取两个字符串的长度,然后添加该长度(还为“\0”字节添加 1 并检查溢出),然后使用 malloc() 保留缓冲区空间获取新字符串并将两个字符串复制到此缓冲区。

你可以这样做(不要只使用这个,它不是很好的测试,并且错误处理不是很好):

void die(const char *msg)
{
fprintf(stderr,"[ERROR] %s\n",msg);
exit(EXIT_FAILURE);
}


char *catString(const char *a, const char *b)
{
//calculate the buffer length we need
size_t lena = strlen(a);
size_t lenb = strlen(b);
size_t lenTot = lena+lenb+1; //need 1 extra for the end-of-string '\0'
if(lenTot<lena) //check for overflow
{
die("size_t overflow");
}
//reseve memory
char *buffer = malloc(lenTot);
if(!buffer) //check if malloc fail
{
die("malloc fail");
}
strcpy(buffer,a); //copy string a to the buffer
strcpy(&buffer[lena],b);//copy string b to the buffer
return buffer;
}

此后,您可以使用此函数从静态字符串 "python2.7 ./myScript "argv[1] 创建所需的字符串

int main(int argc, char **argv)
{
//without a argument we should not call the python script
if(argc<2)
{
die("need at least one argument");
}
//make one string to call system()
char *combined = catString("python2.7 ./myScript ",argv[1]);
printf("DEBUG complete string is '%s'\n",combined);
int i = system(combined);
//we must free the buffer after use it or we generate memory leaks
free(combined);
if(i<0)
{
die("system()-call failed");
}
printf("DEBUG returned from system()-call\n");
return EXIT_SUCCESS;
}

您需要 "python2.7 ./myScript " 中的额外空间,否则您将得到 "python2.7 ./myScriptArgumentToMain"

有了这个,您的调用者可以执行他喜欢的任何代码,因为我们不会转义 argv[1],因此可以使用 yourProgram "argumentToPython ; badProgram argumentToBadProgram"来调用您的程序 code> 也会执行您不想要的 badProgram (在大多数情况下)

关于python - 运行应该接受来自 C 程序的参数的 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43014453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com