If qsub can't be found, simfactory doesn't notice that the command returned a nonzero exit code, and proceeds to return 0 itself. The submit command is in simrestart.py:
output = simlib.ExecuteCommand(submitCommand, output=True)
This should check that the exit code is zero, or fail noisily. What it actually does is
fd = os.popen(command) output = fd.read() fd.close() return output
Apart from the weird reuse of the output input argument as a return value for something else, it is not checking the exit code in the case where the output was requested.