我对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中工作,所以应该没有任何效果。
最佳答案
信息太少了,我无法指出您的代码出了什么问题。
但是我认为您可以运行system("dir")
来检查您的工作目录是否正确。
您知道,如果您在IDE中运行/调试程序,则工作目录可能不符合您的期望。
关于c++ - std::system似乎没有运行我的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61154684/