linux下命令列解析getopt函式

2021-08-07 04:09:54 字數 1963 閱讀 2769

命令列引數解析函式 —— 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 的指標,需要按如...