建議樓主學(xué)習(xí)linux的C語言,,在網(wǎng)上下載一些開源的linux程序,,,里面都有源代碼的,可以多看一些源代碼。
為澧縣等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及澧縣網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、澧縣網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
在linux命令行中,,樓主可模仿調(diào)用getopt()函數(shù),,
#includestdio.h
#includeunistd.h
#includememory.h
#define PATH_MAX 100
void main(int argc, char **argv)
{
int iret;
char ckey, ch;
char cpath[] = { 0 };
FILE *pfile = NULL;
unsigned long ulcount = 0;
ckey = getopt(argc, argv, "e::d::c::C:r:v::");
switch(ckey)
{ case 'c' :
if (NULL == optarg)
{
printf("Please input your new file's PATH and name\n");
printf("If your path or filename has space,input \\ to connect\n");
gets(cpath);
printf("filename is %s\n", cpath);
pfile = fopen(cpath, "w+");
}
else
{
pfile = fopen(optarg, "w+");
}
if (NULL == pfile)
{
printf("Creat file %s ERROR!\n", cpath);
}
else
{
printf("Creat file %s success!\n", cpath);
}
fclose(pfile);
break;
case 'd':
if (NULL == optarg)
{
printf("\nPlease input PATH and filename you want to del\n");
printf("If your path or filename has space,input \\ to connect\n");
memset(cpath, 0, sizeof(cpath));
gets(cpath);
iret = remove(cpath);
}
else
{
iret = remove(optarg);
}
if (0 != iret)
{
printf("Remove file %s ERROR!\n", cpath);
return;
}
else
{
printf("del file %s success!\n", cpath);
}
break;
case 'e':
if (NULL == optarg)
{
printf("\nPlease input PATH and filename you want to edit\n");
printf("If your path or filename has space,input \\ to connect\n");
memset(cpath, 0, sizeof(cpath));
gets(cpath);
pfile = fopen(cpath, "a+");
}
else
{
pfile = fopen(optarg, "a+");
}
if (NULL == pfile)
{
printf("Creat file %s ERROR!\n", cpath);
return;
}
else
{
printf("Creat file %s success!\n", cpath);
}
printf("Now, input what you want to edit, end edit it with ctrl+d\n", cpath);
while((ch = getchar()) != EOF)
{
fputc(ch, pfile);
ulcount++;
}
printf("Input %ld char in total.\nSave it success.\n", ulcount);
break;
case 'v':
if (NULL == optarg)
{
printf("\nPlease input PATH and filename you want to view\n");
printf("If your path or filename has space,input \\ to connect\n");
default :
break;
}
return;
}
有些時候我們需要通過命令行將參數(shù)傳遞給腳本,C語言中有個getopt()方法,python中也有個類似的命令行參數(shù)解析方法getopt()。python也提供了比getopt()更簡潔的argparse方法。另外,sys模塊也可以實現(xiàn)簡單的參數(shù)解析,本文將對這3種命令行參數(shù)解析方法簡要介紹。
sys.argv是傳入的參數(shù)列表,sys.argv[0]是當前python腳本的名稱,sys.argv[1]表示第一個參數(shù),以此類推。
命令行運行:
可以看到傳入的參數(shù)通過sys.argv來獲取,它就是一個參數(shù)列表。
python的getopt與C語言的的getopt()函數(shù)類似。相比于sys模塊,支持長參數(shù)和短參數(shù),并對參數(shù)解析賦值。但它需要結(jié)合sys模塊進行參數(shù)解析,語法格式如下:
短參數(shù)為單個英文字母,如果必須賦值需要在后面加英文冒號( : ),長參數(shù)一般為字符串(相比短參數(shù),更能說明參數(shù)含義),如果必須賦值需要在后面加等號( = )。
命令行運行:
注意:短參數(shù)(options)和長參數(shù)(long_options)不需要一一對應(yīng),可以任意順序,也可以只有短參數(shù)或者只有長參數(shù)。
argparse模塊提供了很多可以設(shè)置的參數(shù),例如參數(shù)的默認值,幫助消息,參數(shù)的數(shù)據(jù)類型等。argparse類主要包括ArgumentParser、add_argument和parse_args三個方法。
下面介紹這三個函數(shù)的使用方法。
argparse默認提供了 -h | --help 參數(shù):
命令行運行:
下面列出部分參數(shù):
下面來添加參數(shù):
命令行運行:
parse_args() 方法用于解析參數(shù),在前面的示例代碼中使用parse_args方法來提取參數(shù)值,對于無效或者錯誤的參數(shù)會打印錯誤信息和幫助信息:
命令行運行:
本文介紹了Python的三種命令行參數(shù)解析方法sys.argv、getopt和argparse,可以根據(jù)自己的需要進行選擇,getopt和argparse兩種方法相比來說,建議選擇argparse,代碼量更少更簡潔。更詳細的使用方法參考官方文檔:
--THE END--
while((c = getopt_long (argc, argv, short_options, long_options, NULL)) != -1)
{
switch (c)
{
case 'c':
commond = optarg;
//printf("My name is XL. %s\n",commond);
break;
case 'f':
fileName = optarg;
printf("His name is ST. %s\n",fileName);
break;
case 's':
這是我以前寫的 你參考
把main函數(shù)聲明為int main(int argc,char *argv[])
argc 是參數(shù)的個數(shù)
如:
int main(int argc,char *argv[])
{
printf("%s",argv[1]);
}
這是一個簡單的未做錯誤判斷的echo函數(shù),將上面的源程序編譯連接為echo.exe,然后在命令提示符下輸入echo hello
這樣,argc=2,argv[0]為echo,argv[1]為hello
我沒用過linux,不知道上面的回答有沒有對上意思。