命令列引數解析函式 —— getopt()
getopt()函式宣告如下:
#include
int getopt(int argc, char * const argv, const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
該函式的argc和argv引數通常直接從main()的引數直接傳遞而來。optstring是選項字母組成的字串。如果該字串裡的任一字元後面有冒號,那麼這個選項就要求有選項引數。
當給定getopt()命令引數的數量 (argc)、指向這些引數的陣列 (argv) 和選項字串 (optstring) 後,getopt() 將返回第乙個選項,並設定一些全域性變數。使用相同的引數再次呼叫該函式時,它將返回下乙個選項,並設定相應的全域性變數。如果不再有可識別的選項,將返回 -1,此任務就完成了。
getopt() 所設定的全域性變數包括:
以下面的程式為例:
選項:
清單2:
#include
#include
int main (int argc, char **argv)
}return 0;}
執行結果:
$ ./opt_parse_demo -n
my name is lyong.
$ ./opt_parse_demo -g
her name is xxiong.
$ ./opt_parse_demo -l forever
our love is forever
$ ./opt_parse_demo -ngl forever
my name is lyong.
her name is xxiong.
our love is forever
6、改變getopt()對錯誤命令列引數資訊的輸出行為
不正確的呼叫程式在所難免,這種錯誤要麼是命令列選項無效,要麼是缺少選項引數。正常情況下,getopt()會為這兩種情況輸出自己的出錯資訊,並且返回'?'。為了驗證此事,可以修改一下上面的清單2中的**。
清單3:
#include
#include
int main (int argc, char **argv)
}return 0;}
輸入乙個錯誤的命令列,結果如下:
$ ./opt_parse_demo -l
./opt_parse_demo: option requires an argument -- l
arguments error!
如果不希望輸出任何錯誤資訊,或更希望輸出自定義的錯誤資訊。可以採用以下兩種方法來更改getopt()函式的出錯資訊輸出行為:
清單4:
#include
#include
int main (int argc, char **argv)
}return 0;}
測試結果:
$ ./opt_parse_demo -a
無效的選項字元 ' a '!
$ ./opt_parse_demo -l
缺少選項引數!
python中處理命令列引數命令getopt
os下有個方法walk,非常的好用,用來生成乙個generator。每次可以得到乙個三元tupple,其中第乙個為起始路徑,第二個為起始路徑下的資料夾,第三個是起始路徑下的檔案。1.匯入getopt,sys 模組 2.分析命令列引數 3.處理結果 第一步很簡單,只需要 import getopt,s...
Linux下命令列解析函式getopt簡單使用
以前寫一些除錯程式的時候解析命令都是使用strtok作分割再判斷,偶然間看到由乙個getopt函式,可以很快的實現這個功能。include int getopt int argc,char const ar const char optstring extern char optarg extern...
命令列解析
不想自已分析命令列的話也可以 lpwstr lpwargv lpwargv commandlinetoargvw getcommandlinew dwcount dwcount的值即為命令列引數的個數 像控制台程式一樣,引數也包括本執行檔案的全路徑 lpwargv為乙個lpwstr 的指標,需要按如...