def cmdline_generator(param_iter, PathToBin=None, PathToCmd=None,
    PathsToInputs=None, PathToOutput=None, PathToStderr='/dev/null',
    PathToStdout='/dev/null', UniqueOutputs=False, InputParam=None,
    OutputParam=None):
    """Generates command lines that can be used in a cluster environment

    param_iter : ParameterIterBase subclass instance
    PathToBin : Absolute location primary command (i.e. Python)
    PathToCmd : Absolute location of the command
    PathsToInputs : Absolute location(s) of input file(s)
    PathToOutput : Absolute location of output file
    PathToStderr : Path to stderr
    PathToStdout : Path to stdout
    UniqueOutputs : Generate unique tags for output files
    InputParam : Application input parameter (if not specified, assumes
        stdin is to be used)
    OutputParam : Application output parameter (if not specified, assumes
        stdout is to be used)
    """
    if not PathsToInputs:
        raise ValueError('No input file(s) specified.')
    if not PathToOutput:
        raise ValueError('No output file specified.')
    if not isinstance(PathsToInputs, list):
        PathsToInputs = [PathsToInputs]
    if PathToBin is None:
        PathToBin = ''
    if PathToCmd is None:
        PathToCmd = ''
    if PathToStdout is None:
        stdout_ = ''
    else:
        stdout_ = '> "%s"' % PathToStdout
    if PathToStderr is None:
        stderr_ = ''
    else:
        stderr_ = '2> "%s"' % PathToStderr
    if OutputParam is None:
        output = '> "%s"' % PathToOutput
        stdout_ = ''
    else:
        output_param = param_iter.AppParams[OutputParam]
        output_param.on('"%s"' % PathToOutput)
        output = str(output_param)
        output_param.off()
    output_count = 0
    base_command = ' '.join([PathToBin, PathToCmd])
    for params in param_iter:
        for inputfile in PathsToInputs:
            cmdline = [base_command]
            cmdline.extend(sorted(filter(None, map(str, params.values()))))
            if InputParam is None:
                input = '< "%s"' % inputfile
            else:
                input_param = params[InputParam]
                input_param.on('"%s"' % inputfile)
                input = str(input_param)
                input_param.off()
            cmdline.append(input)
            if UniqueOutputs:
                cmdline.append(''.join([output, str(output_count)]))
                output_count += 1
            else:
                cmdline.append(output)
            cmdline.append(stdout_)
            cmdline.append(stderr_)
            yield ' '.join(cmdline)
