打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python, shell, C/C++ 从命令行获得参数

 

前言:

在给nagios开发监控插件的时候,不论是用哪种语言写插件,最好能从命令行获得参数(警告值和报警值:-w warning_value -c critical_value),而不是在插件里把这两个值写进去,通常情况下会随着环境改变而更改警告和报警值。

python: 通过sys模块实现

官方文档:sys.argvThe list of command line arguments passed to a Python script. argv[0] is the script name (it is operating system dependent whether this is a full pathname or not). If the command was executed using the -c command line option to the interpreter, argv[0] is set to the string '-c'. If no script name was passed to the Python interpreter, argv[0] is the empty string.
sys.argv命令列表,第一个元素argv[0]是脚本名,argv[1]表示第1个参数,argv[2]表示第2个参数,以此类推。

举个简单的例子:

#!/usr/bin/env pythonimport sysdef PrintArgv(): # 如果需要list中的index,可以用内置的enumerate函数实现;    print('all para(s):', sys.argv)    print('script name:', sys.argv[0])    if sys.argv[1:]:        index = 1        for para in sys.argv[1:]:            print('para', index, ':', para)            index += 1

import sys
def PrintArgv():
    print('all para(s):', sys.argv)
    print('script name:', sys.argv[0])
    argv_list = list(enumerate(sys.argv))
    if sys.argv[1:]:
        for para in argv_list[1:]:
        print('para', para[0], ':', para[1])

PrintArgv()

>python test.pyall para(s): ['test.py']script name: test.py>python test.py 'name' 913all para(s): ['test.py', "'name'", '913']script name: test.pypara 1 : 'name'para 2 : 913>python test.py 'name' 913 [1,2]all para(s): ['test.py', "'name'", '913', '[1,2]']script name: test.pypara 1 : 'name'para 2 : 913para 3 : [1,2]

可以看出,参数默认为字符串类型,同input一样,需要转换为int类型的传入参数时需要注意。

shell实现:$变量

shell脚本中可以通过变量的方式调用命令传入的参数,$0为脚本名,第一个参数$1,第二个参数$2,以此类推。特别的,$#表示参数个数,$@表示所有参数。

简单例子:

# --para.sh--
#!/bin/bashecho "all para(s): " $@echo "script name: " $0for index in `seq 1 $#`do echo "para ${index}: " $1 shiftdone
[root@oam shell]# ./para.shall para(s):script name:  para.sh[root@oam shell]# ./para.sh hello lei 2014all para(s):  hello lei 2014script name:  para.shpara 1:  hellopara 2:  leipara 3:  2014

C/C++实现

C和C++都允许从命令行给main函数传入参数:int main(int argc, char*argv[]),argc表示有几个参数将传给main函数,参数以字符串数组argv[]的形式传递。同样argv[0]表示二进制文件名,argv[1]表示第一个参数,argv[2]表示第二个参数,依此类推。

简单的例子:

#include<iostream>using namespace std;int main(int argc, char *argv[]){   cout << "file name: " << argv[0] << endl;   cout << "para num: " << argc << endl;   for (int i=1; i<argc; i++)   {      cout << "para " << i << ": "           << argv[i] << endl;   }   return 0;}
[root@oam c_bat]# ./a.outfile name: ./a.outpara num: 1[root@oam c_bat]# ./a.out hello night 913file name: ./a.outpara num: 4para 1: hellopara 2: nightpara 3: 913 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
实用工具:在工作中我是如何执行python文件的
python sys.argv[]用法
Python 使用命令行参数
获取命令行参数
python sys模块的常见用法汇总
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服