std :: system似乎没有运行我的命令

时间:2020-04-11 09:34:34

标签: c++ gnuplot std

我对C ++缺乏经验,并试图建立一个程序来创建一个数据文件,一个gnuplot脚本绘制该数据文件,然后运行gnuscript。我设置的程序按预期方式创建了数据文件和gnuplot脚本,但是当尝试使用std::system运行脚本时,我实际上没有任何输出:

    std::string sysGnuCommand = "gnuplot output/data/_data.gnu";
    int errorGnuSys = std::system(sysGnuCommand.c_str());
    if (errorGnuSys == -1) std::cout << "[ERROR]: Couldn't execute GnuPlot.\n";

以这种方式运行程序,将按预期方式创建数据文件和gnuplot脚本,但是gnuscript未运行,系统功能也未返回错误。相反,当我运行程序,然后在控制台中手动运行gnuplot output/data/_data.gnu时,我得到了期望的确切输出。为什么std :: system命令似乎无法运行?

编辑:如果我将使用gnuplot搜索的目录更改为错误的目录,则gnuplot会正确返回错误。通过在gnuplot脚本中添加一行带有控制台输出的行,我发现std::system在程序中被调用时实际上并未运行_data.gnu。我已检查以确保std::system在预期的目录中可以正常工作,因此问题肯定确实在某个地方。

编辑2:

int main(){
    FileSystem _fileManager;

    std::string _outDir = "output/data/";

    create_folder_path(_outDir + "/plots");

    _fileManager.set_directory(_outDir);

    std::string currentName;
    currentName = "_data";

    std::string _csvOutput;
    _csvOutput = currentName + ".csv";
    _fileManager.create_file(_csvOutput);

    std::string _gnuScriptOutput;
    _gnuScriptOutput = currentName + ".gnu";
    _fileManager.create_file(_gnuScriptOutput);


    std::string _gnuText = 
        "system \"dir\"\n"
        "set terminal postscript enhanced color eps\n"
        "set cbrange [0:25]\n"
        "set output \"" + _outDir + "plots/" + currentName + ".ps\"\n"
        "plot \"" + _outDir + _csvOutput + "\" using 1:2:3 notitle with image";
    _fileManager.add_line(_gnuScriptOutput, _gnuText);

    for(int x = 1; x <= 5; ++x){
        for(int y = 1; y <= 5; ++y){
            std::vector<double> outputLine;
            outputLine.push_back(x);
            outputLine.push_back(y);
            outputLine.push_back(x*y);
            _fileManager.add_line(_csvOutput, outputLine);
            outputLine.clear();
        }
    }

    std::string sysGnuCommand = "gnuplot " + _outDir + _gnuScriptOutput;
    int errorGnuSys = std::system(sysGnuCommand.c_str());
    if (errorGnuSys != 0) std::cout << "[ERROR]: Couldn't execute GnuPlot.\n";
}

这是我的main函数的代码。 FileSystem只是简化数据处理的一类,并且完全按预期工作-我相信这不是问题的根源。我也不在IDE中工作,所以应该没有效果。

1 个答案:

答案 0 :(得分:0)

信息太少了,我无法指出您的代码出了什么问题。

但是我认为您可以运行system("dir")来检查您的工作目录是否正确。

您知道,如果您在IDE中运行/调试程序,则工作目录可能不符合您的期望。

相关问题