# CmdLine # This class provides a parameter parsing framework which is very useful when one needs to run several experiments that rely on different parameter settings that are passed in the command line. This class will also override the default print function to direct all the output to a log file as well as screen at the same time. A sample `lua` file is given below that makes use of `CmdLine` class. ```lua cmd = torch.CmdLine() cmd:text() cmd:text() cmd:text('Training a simple network') cmd:text() cmd:text('Options') cmd:option('-seed',123,'initial random seed') cmd:option('-booloption',false,'boolean option') cmd:option('-stroption','mystring','string option') cmd:text() -- parse input params params = cmd:parse(arg) params.rundir = cmd:string('experiment', params, {dir=true}) paths.mkdir(params.rundir) -- create log file cmd:log(params.rundir .. '/log', params) ``` When this file is run on the th command line as follows ```shell # th myscript.lua ``` It will produce the following output: ``` [program started on Tue Jan 10 15:33:49 2012] [command line arguments] booloption false seed 123 rundir experiment stroption mystring [----------------------] booloption false seed 123 rundir experiment stroption mystring ``` The same output will also be written to file `experiment/log`. Whenever one of the options are passed on the command line and is different than the default value, the `rundir` is name is produced to reflect the parameter setting. ```shell # th myscript.lua -seed 456 -stroption mycustomstring ``` This will produce the following output: ``` [program started on Tue Jan 10 15:36:55 2012] [command line arguments] booloption false seed 456 rundir experiment,seed=456,stroption=mycustomstring stroption mycustomstring [----------------------] booloption false seed 456 rundir experiment,seed=456,stroption=mycustomstring stroption mycustomstring ``` and the output will be logged in `experiment,seed=456,stroption=mycustomstring/log` ### addTime([name] [,format]) ### Adds a prefix to every line in the log file with the date/time in the given format with an optional name argument. The date/time format is the same as `os.date()`. Note that the prefix is only added to the log file, not the screen output. The default value for name is empty and the default format is '%F %T'. The final produced output for the following command is: ```lua > cmd:addTime('your project name','%F %T') > print('Your log message') ``` ``` 2012-02-07 08:21:56[your project name]: Your log message ``` ### log(filename, parameter_table) ### It sets the log filename to `filename` and prints the values of parameters in the `parameter_table`. If filename is an open file descriptor, it will write to the file instead of creating a new one. ### option(name, default, help) ### Stores an option argument. The name should always start with '-'. ### [table] parse(arg) ### Parses a given table, `arg` is by default the argument table that is created by `lua` using the command line arguments passed to the executable. Returns a table of option values. ### silent() ### Silences the output to standard output. The only output is written to the log file. ### [string] string(prefix, params, ignore) ### Returns a string representation of the options by concatenating the non-default options. `ignore` is a table `{dir=true}`, which will ensure that option named `dir` will be ignored while creating the string representation. This function is useful for creating unique experiment directories that depend on the parameter settings. ### text(string) ### Logs a custom text message.