Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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
从c+运行python脚本时出现问题+;_Python_C++ - Fatal编程技术网

从c+运行python脚本时出现问题+;

从c+运行python脚本时出现问题+;,python,c++,Python,C++,我正在尝试制作一个可以对python程序的输出进行分级的程序。我错过了一些简单的东西,但我总是因为试图将输出转换为字符串而遇到seg错误。如果我给它留一个char*就可以了,但是我想要一个字符串,这样我以后就可以比较输出了。 这是代码 #include <iostream> #include <string> using namespace std; string runPython(const char* filename) { string cmd = "p

我正在尝试制作一个可以对python程序的输出进行分级的程序。我错过了一些简单的东西,但我总是因为试图将输出转换为字符串而遇到seg错误。如果我给它留一个char*就可以了,但是我想要一个字符串,这样我以后就可以比较输出了。 这是代码

#include <iostream>
#include <string>
using namespace std;

string runPython(const char* filename) {
    string cmd = "python " + string(filename);
    char* buf;
    FILE* in = popen(cmd.c_str(), "r");
    fscanf(in,"%s", buf);
    string res(buf);
    pclose(in);
    return res;
}

int main(int argc, char** argv) {
    if(argc > 1) {  
        string res = runPython(argv[1]);
        printf("%s", res.c_str());
    }
    else {
        printf("\e[31mNo File Submitted for Grading\e[0m\n");
    }
    return 0;
}
#包括
#包括
使用名称空间std;
字符串runPython(常量字符*文件名){
string cmd=“python”+字符串(文件名);
char*buf;
FILE*in=popen(cmd.c_str(),“r”);
fscanf(单位为“%s”,buf);
字符串res(buf);
pclose(in);
返回res;
}
int main(int argc,字符**argv){
如果(argc>1){
string res=runPython(argv[1]);
printf(“%s”,res.c_str());
}
否则{
printf(“\e[31mNo提交分级的文件\e[0m\n”);
}
返回0;
}

您必须首先分配缓冲区

#include <iostream>
#include <string>
using namespace std;

#define MAX_READ 4096

string runPython(const char* filename) {
    string cmd = "python " + string(filename);
    char* buf = new char[MAX_READ]; // buffer allcoation
    FILE* in = popen(cmd.c_str(), "r");
    fscanf(in,"%s", buf);
    string res(buf);
    delete[] buf; // buffer release
    pclose(in);
    return res;
}

int main(int argc, char** argv) {
    if(argc > 1) {  
        string res = runPython(argv[1]);
        printf("%s", res.c_str());
    }
    else {
        printf("\e[31mNo File Submitted for Grading\e[0m\n");
    }
    return 0;
}
#包括
#包括
使用名称空间std;
#定义最大读取4096
字符串runPython(常量字符*文件名){
string cmd=“python”+字符串(文件名);
char*buf=new char[MAX_READ];//buffer allcoation
FILE*in=popen(cmd.c_str(),“r”);
fscanf(单位为“%s”,buf);
字符串res(buf);
delete[]buf;//缓冲区释放
pclose(in);
返回res;
}
int main(int argc,字符**argv){
如果(argc>1){
string res=runPython(argv[1]);
printf(“%s”,res.c_str());
}
否则{
printf(“\e[31mNo提交分级的文件\e[0m\n”);
}
返回0;
}

您必须首先分配缓冲区

#include <iostream>
#include <string>
using namespace std;

#define MAX_READ 4096

string runPython(const char* filename) {
    string cmd = "python " + string(filename);
    char* buf = new char[MAX_READ]; // buffer allcoation
    FILE* in = popen(cmd.c_str(), "r");
    fscanf(in,"%s", buf);
    string res(buf);
    delete[] buf; // buffer release
    pclose(in);
    return res;
}

int main(int argc, char** argv) {
    if(argc > 1) {  
        string res = runPython(argv[1]);
        printf("%s", res.c_str());
    }
    else {
        printf("\e[31mNo File Submitted for Grading\e[0m\n");
    }
    return 0;
}
#包括
#包括
使用名称空间std;
#定义最大读取4096
字符串runPython(常量字符*文件名){
string cmd=“python”+字符串(文件名);
char*buf=new char[MAX_READ];//buffer allcoation
FILE*in=popen(cmd.c_str(),“r”);
fscanf(单位为“%s”,buf);
字符串res(buf);
delete[]buf;//缓冲区释放
pclose(in);
返回res;
}
int main(int argc,字符**argv){
如果(argc>1){
string res=runPython(argv[1]);
printf(“%s”,res.c_str());
}
否则{
printf(“\e[31mNo提交分级的文件\e[0m\n”);
}
返回0;
}