3つのプログラミング言語での getopt の使い方メモ
C、Perl、Python でのgetoptのサンプル。
とりあえず、help, version, user, password の4つのオプションを指定できるようにした。
- 使い方
% my_getopt --help % my_getopt -h % my_getopt --version % my_getopt -v % my_getopt --user=foo --password=abc % my_getopt -ufoo -pabc % my_getopt --user=foo -pabc
のような感じ。短縮形での指定も可能。
helpを指定した場合には、usage を表示して終了。 version を指定した場合は、バージョン情報を表示して終了。 user とpassword を指定した場合は、その値を表示して終了。
- C
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <getopt.h> static char *user=NULL; static char *password=NULL; void usage(){ printf("Usage: my_getopt --user=<USERNAME> --password=<PASSWORD>\n"); } void version(){ printf("Version 0.0.1\n"); } int main(int argc, char** argv){ int c; while(1){ static struct option long_options[] = { {"user", required_argument, 0, 'u'}, {"password", required_argument, 0, 'p'}, {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {0,0,0,0} }; int option_index = 0; c = getopt_long( argc, argv, "u:p:hv", long_options, &option_index); if( c==-1 ) break; switch(c){ case 'u': user = (char *)malloc( sizeof(char) * (strlen(optarg)+1) ); strncpy( user, optarg, strlen(optarg)+1 ); break; case 'p': password = (char *)malloc( sizeof(char) * (strlen(optarg)+1) ); strncpy( password, optarg, strlen(optarg)+1 ); break; case 'v': version(); exit(EXIT_SUCCESS); case 'h': default: usage(); exit(EXIT_SUCCESS); } } if( !(user && password) ){ usage(); exit(EXIT_FAILURE); } printf ("user: %s\n", user); printf ("password: %s\n", password); exit(EXIT_SUCCESS); }
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; my $user; my $password; my $help; my $version; GetOptions('user=s' => \$user, 'password=s' => \$password, 'help' => \$help, 'version' => \$version, ); if($help){ usage(); exit(0); } if($version){ version(); exit(0); } unless($user && $password){ usage(); exit(-1); } print <<"END_OF_BODY" \$user: $user \$password: $password END_OF_BODY ; sub usage{ print 'perl my_getopt.pl --user=<USERNAME> --password=<PASSWORD>', "\n"; } sub version{ print 'Version: 0.0.1', "\n"; }
#!/usr/bin/python import getopt import sys def usage(): print 'python my_getopt.py --user=<USERNAME> --password=<PASSWORD>' def version(): print 'Version: 0.0.1' def main(): user=None password=None try: opts, args = getopt.getopt(sys.argv[1:], "u:p:hv", ["user=","password=","help", "version"]) except getopt.GetoptError: usage() sys.exit(2) for o, a in opts: if o in ("-h", "--help"): usage() sys.exit() if o in ("-v", "--version"): version() sys.exit() if o in ("-u", "--user"): user = a if o in ("-p", "--password"): password = a if(user==None or password==None): usage() sys.exit(2) print "user:%s" % (user,) print "password:%s" % (password,) sys.exit(0) if __name__ == "__main__": main()