X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=systemcommand.cpp;h=b5b4945b92b6d664e6d81aa2dc6911a2d30414c3;hb=541bab1dac00688b4c3a8c4a95ab464412663c50;hp=e5aeb3e8b73dfb59008f6ddccaa3b0703b25e696;hpb=43835751a12097ea9d46a4ce68e2671ba7aff9d4;p=mothur.git diff --git a/systemcommand.cpp b/systemcommand.cpp index e5aeb3e..b5b4945 100644 --- a/systemcommand.cpp +++ b/systemcommand.cpp @@ -12,7 +12,7 @@ //********************************************************************************************************************** vector SystemCommand::setParameters(){ try { - CommandParameter pcommand("command", "String", "", "", "", "", "",false,false); parameters.push_back(pcommand); + CommandParameter pcommand("command", "String", "", "", "", "", "","",false,false); parameters.push_back(pcommand); vector myArray; for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); } @@ -91,19 +91,30 @@ int SystemCommand::execute(){ if (abort == true) { if (calledHelp) { return 0; } return 2; } - //system(command.c_str()); - FILE *lsofFile_p = popen(command.c_str(), "r"); + //if command contains a redirect don't add the redirect + bool usedRedirect = false; + if ((command.find('>')) == string::npos) { + command += " > ./commandScreen.output 2>&1"; + usedRedirect = true; + } - if (!lsofFile_p) { return 0; } + system(command.c_str()); - char buffer[1024]; - while ( fgets(buffer, 1024, lsofFile_p) != NULL ) { - string temp = buffer; - m->mothurOut(temp); + if (usedRedirect) { + ifstream in; + string filename = "./commandScreen.output"; + m->openInputFile(filename, in, "no error"); + + string output = ""; + while(char c = in.get()){ + if(in.eof()) { break; } + else { output += c; } + } + in.close(); + + m->mothurOut(output); m->mothurOutEndLine(); + m->mothurRemove(filename); } - m->mothurOutEndLine(); - - pclose(lsofFile_p); return 0; }