PLearn 0.1
|
#include <RunCommand.h>
Public Member Functions | |
RunCommand () | |
virtual void | run (const vector< string > &args) |
The actual implementation of the 'RunCommand' command. | |
Static Protected Attributes | |
static PLearnCommandRegistry | reg_ |
This allows to register the 'RunCommand' command in the command registry. |
Definition at line 50 of file RunCommand.h.
PLearn::RunCommand::RunCommand | ( | ) | [inline] |
Definition at line 53 of file RunCommand.h.
: PLearnCommand("run", "runs a .plearn script", "run <script.plearn> [ argname1=val argname2=val ... ] \n" "Runs a .plearn script, with the arguments defined as\n" "macro variables, accessible from within the script as ${argname} \n" "'run' is what gets called when you give NO command name, but a valid .plearn script \n" "Lookup plearn help scripts for more info on scripts. \n" ) {}
void PLearn::RunCommand::run | ( | const vector< string > & | args | ) | [virtual] |
The actual implementation of the 'RunCommand' command.
Implements PLearn::PLearnCommand.
Definition at line 63 of file RunCommand.cc.
References std::copy(), PLearn::PL_Log::enableNamedLogging(), PLearn::PPath::extension(), PLearn::PStream::good(), i, in, PLearn::PL_Log::instance(), PLearn::isfile(), PLearn::PP< T >::isNotNull(), PLearn::openFile(), PLearn::openString(), PLearn::parseBaseAndParameters(), PLearn::PStream::plearn_ascii, PLERROR, PLearn::PyPLearnScript::process(), PLearn::readFileAndMacroProcess(), PLearn::readObject(), PLearn::PStream::skipBlanksAndCommentsAndSeparators(), PLearn::split_on_first(), and PLearn::PL_Log::verbosity().
Referenced by PLearn::AutoRunCommand::run().
{ const vector<string>* the_args = &args; vector<string> args_augmented; PPath scriptfile = args[0]; if (!isfile(scriptfile)) { // There is no file with this exact name. Maybe there are parameters // appended to the name? string base; map<string, string> params; parseBaseAndParameters(scriptfile, base, params); if (!isfile(base)) PLERROR("Non-existent script file: %s\n",scriptfile.c_str()); // Add new arguments. args_augmented = args; map<string, string>::const_iterator it = params.begin(); for (; it != params.end(); it++) args_augmented.push_back(it->first + "=" + it->second); the_args = &args_augmented; scriptfile = base; } string extension = scriptfile.extension(); string script; PP<PyPLearnScript> pyplearn_script; PStream in; if (extension == "pyplearn") { // Make a copy of args with the first argument (the name of the script) // removed, leaving the first argument to the script at index 0. vector<string> pyplearn_args(the_args->size()-1); copy(the_args->begin() + 1, the_args->end(), pyplearn_args.begin()); pyplearn_script = PyPLearnScript::process(scriptfile, pyplearn_args); script = pyplearn_script->getScript(); // When we call the pyplearn script with either // --help or --dump, everything will already have been done by // the time the PyPLearnScript is built. if ( script == "" ) return; PL_Log::instance().enableNamedLogging(pyplearn_script->module_names); PL_Log::instance().verbosity(pyplearn_script->verbosity); in = openString( script, PStream::plearn_ascii ); } else if(extension=="plearn") // perform plearn macro expansion { map<string, string> vars; // populate vars with the arguments passed on the command line for (unsigned int i=1; i<the_args->size(); i++) { string option = (*the_args)[i]; // Skip --foo command-lines options. if (option.size() < 2 || option.substr(0, 2) != "--") { pair<string, string> name_val = split_on_first(option, "="); vars[name_val.first] = name_val.second; } } script = readFileAndMacroProcess(scriptfile, vars); in = openString( script, PStream::plearn_ascii ); } else if(extension=="psave") // do not perform plearn macro expansion { in = openFile(scriptfile, PStream::plearn_ascii); } else PLERROR("Invalid extension for script file. Must be one of .pyplearn .plearn .psave"); while ( in.good() ) { PP<Object> o = readObject(in); o->run(); in.skipBlanksAndCommentsAndSeparators(); } if ( pyplearn_script.isNotNull() ) pyplearn_script->close(); }
PLearnCommandRegistry PLearn::RunCommand::reg_ [static, protected] |
This allows to register the 'RunCommand' command in the command registry.
Definition at line 69 of file RunCommand.h.