use clap instead of optparse